工具类之文件的上传

package cn.sunline.tiny.flow.owner.center.money;

import cn.sunline.tiny.core.FlowCom;
import cn.sunline.tiny.core.JavaFlow;
import cn.sunline.tiny.core.PriCache;
import cn.sunline.tiny.core.PubCache;
import cn.sunline.tiny.util.Tools;
import cn.sunline.tiny.web.Context;
import cn.sunline.tiny.web.cache.SysConfig;
import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.annotation.Resource;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;

/**
     * 文件上传(单个/多个)
     *
     * @author lin
     */
@Component("upload_jsons_flow")
public class upload_jsonsFlow extends JavaFlow {
    private static final Logger log = LoggerFactory.getLogger(upload_jsonsFlow.class);

    @Resource
    private Tools tls;

    private static final String UPLOAD_PATH = SysConfig.getInstance().getValue("uploadPath");

    @FlowCom(in = "true")
    public String flow_1(Context ct, PriCache pri, PubCache pub) {

        MultipartHttpServletRequest request = (MultipartHttpServletRequest) ct.getRequest();
        //传过来的文件
        Map<String, MultipartFile> fileMap = request.getFileMap();

        //限制一次传输的文件数量
        if (fileMap.size() > Integer.parseInt("10")) {
            log.debug("文件数量超出限制:" + fileMap.size() + " > " + "10");
            tls.returnFun("800004", ct);
            return "";
        }
        //配置文件
//        String uploadPath =UPLOAD_PATH;
        String uploadPath ="E:\\mybs\\img";

        //路径
        String toDay = tls.currentYMDNum();
        String dirName =uploadPath+File.separator+toDay+File.separator+System.currentTimeMillis();

        //创建带层级的目录
        File files = new File(dirName);
        if(!files.exists()){
            files.mkdirs();
        }

        List<String> filePathList = new ArrayList<>();
        // 循环判断文件类型是否合法
        for (Map.Entry<String, MultipartFile> multipartFileEntry : fileMap.entrySet()) {
            //前端传过来的文件名
            /*
               <input type=file name=file1><br>
               <input type=file name=file1><br>
                multipartFileEntry.getKey() = name 相同即为一个文件
            */
            //文件
            MultipartFile file = multipartFileEntry.getValue();
            //文件原始名
            String originalFilename = file.getOriginalFilename();
            //文件类型
            String fileType = originalFilename.substring(originalFilename.lastIndexOf("."));
            if (!".JPG,.JPEG,.PNG".toLowerCase().contains(fileType.toLowerCase())) {
                log.debug("非法的文件类型:" + fileType);
                tls.returnFun("800003", ct);
                return "";
            }

            log.debug("originalFilename"+originalFilename);
            //新的文件名
            String newFilepath = dirName + File.separator+ UUID.randomUUID()+fileType;
            // 判断文件是否存在
            if (!new File(newFilepath).exists()) {
                try {
                    //使用此方法保存必须要绝对路径且文件夹必须已存在
                    file.transferTo(new File(newFilepath));
                    filePathList.add(newFilepath);
                    System.out.println("-------------------------------");
                } catch (IOException e) {
                    log.debug("上传失败"+e.getMessage(),e);
                    e.printStackTrace();
                    JSONObject output = new JSONObject();
                    tls.returnFun("999900", ct);
                    return "";
                }
            }else{
                log.debug("上传失败:文件已存在");
                tls.returnFun("999900", ct);
            }
        }
        JSONObject output = new JSONObject();
        output.put("filePathList",filePathList);
        tls.returnFun("000000", output, ct);
        return "";
    }
}

 

posted @ 2021-01-29 16:26  8ling1ling  阅读(45)  评论(0)    收藏  举报