jyy
2021-04-12 f1a565cbcbb1ab672fdbc57953ce6d8298a159fe
修复bug9
1 files added
169 ■■■■■ changed files
zq-erp/src/main/java/com/matrix/system/common/actions/MultipleFileUploadAction.java 169 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/common/actions/MultipleFileUploadAction.java
New file
@@ -0,0 +1,169 @@
package com.matrix.system.common.actions;
import com.alibaba.fastjson.JSONObject;
import com.matrix.core.tools.StringUtils;
import com.matrix.core.tools.UUIDUtil;
import com.matrix.system.common.constance.AppConstance;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * 多文件上传控制器
 *
 * @author jiangyouyao
 * @email 512061637@qq.com
 * @date 2019年2月25日
 */
@Controller
@RequestMapping(value = "admin/multipleUploadFile")
public class MultipleFileUploadAction {
    Logger log = Logger.getLogger(MultipleFileUploadAction.class);
    @Value("${file_storage_path}")
    private String fileStoragePath;
    @Value("${static_resource_url}")
    private String nginxUrl;
    /**
     * 最大值
     */
    private Long maxSize = 1024*1024*100L;
    /**
     * 多文件上传方法
     *
     * @author jiangyouyao
     * @email 512061637@qq.com
     * @date 2019年2月25日
     * @param response
     * @param request
     * @return
     * @throws IOException
     * @throws FileUploadException
     */
    @RequestMapping(value = "/doUpload")
    public @ResponseBody JSONObject doFileUpload(HttpServletResponse response, MultipartHttpServletRequest request, Integer data)
            throws IOException, FileUploadException {
        // 文件保存目录路径
        String savePath = fileStoragePath;
        // 文件保存目录URL
        String saveUrl = nginxUrl;
        // String msgPag = "common/fileUploadResult";
        JSONObject object = new JSONObject();
        response.setContentType("text/html; charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        // 保存和访问路径检查
        if (StringUtils.isBlank(saveUrl) || StringUtils.isBlank(savePath)) {
            object.put("status", "err");
            object.put("msg", "文件上传失败错误代码:001");
            return object;
        }
        // 检查目录
        File uploadDir = new File(savePath);
        if (!uploadDir.isDirectory()) {
            uploadDir.mkdir();
        }
        // 检查目录写权限
//        if (!uploadDir.canWrite()) {
//            object.put("status", "err");
//            object.put("msg", "上传目录没有写权限");
//            return object;
//        }
        Map<String, MultipartFile> fileMaps = request.getFileMap();
        for (String key : fileMaps.keySet()) {
            MultipartFile file = fileMaps.get(key);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
            String ymd = sdf.format(new Date());
            savePath += ymd + "/";
            saveUrl += ymd + "/";
            File dirFile = new File(savePath);
            if (!dirFile.exists()) {
                dirFile.mkdirs();
            }
            log.info("上传文件名:" + file.getOriginalFilename());
            log.info("上传文件大小:" + file.getBytes().length);
            log.info("上传文件大小限制:" + maxSize);
            log.info("上传文件大小是否超过限制:" + (file.getBytes().length > maxSize));
            if (file.getBytes().length > maxSize) {
                object.put("status", "err");
                object.put("msg", "上传文件大小超过限制");
                return object;
            }
            String fileName = file.getOriginalFilename();
            String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
            fileName = fileName.replace("." + fileExt, "");
            fileName = getSensitive(fileName);
            String newFileName = UUIDUtil.getRandomID() + UUIDUtil.getRandomID() + "." + fileExt;
            File uploadedFile = new File(savePath, newFileName);
            try {
                FileCopyUtils.copy(file.getBytes(), uploadedFile);
            } catch (Exception e) {
                object.put("status", "err");
                object.put("msg", "上传文件失败 "+e.getMessage());
                return object;
            }
            log.info("saveUrl:" + saveUrl);
            String visitPath = saveUrl + newFileName;
            log.info("上传一个文件:" + newFileName);
            log.info("访问路径:" + visitPath);
            // 获取回调函数
            /*
             * String callBack = request.getParameter("callBack"); String inputId =
             * request.getParameter("inputId"); request.setAttribute("status", "200");
             * request.setAttribute("callBack", callBack); request.setAttribute("inputId",
             * inputId); request.setAttribute("url", visitPath);
             */
            object.put("path", visitPath);
            object.put("fileName", fileName);
            object.put("status", 200);
            if (data != null) {
                object.put("index", data);
            }
        }
        return object;
    }
    /**
     * 检查文件名,过滤特殊字符
     *
     * @author jiangyouyao
     * @email 512061637@qq.com
     * @date 2019年2月25日
     * @param globWords
     * @return
     */
    public String getSensitive(String globWords) {
        String sensitive = "";
        Pattern pattern = Pattern.compile(AppConstance.SPECIAL_CHARACTERS);
        Matcher matcher = pattern.matcher(globWords);
        while (matcher.find()) {
            sensitive += matcher.group();
        }
        /*
         * if(sensitive=="" || sensitive.length()<3 ){
         * sensitive=StringUtils.getRandomString(8); }
         */
        return sensitive;
    }
}