All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.kg.component.file.UploadFileUtils Maven / Gradle / Ivy

There is a newer version: 1.1.26
Show newest version
package com.kg.component.file;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import com.kg.component.utils.GuidUtils;
import org.springframework.util.FileCopyUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 文件上传 - 工具类
 *
 * @author ziro
 * @date 2022-07-02 14:54:24
 */
public class UploadFileUtils {
    /**
     * 文件上传处理
     *
     * @param request 请求体
     * @param dirName 自定义文件夹
     * @return 上传文件列表
     */
    public static List upload(HttpServletRequest request, String dirName) throws IOException {
        List resultList = new ArrayList<>();
        // 上传文件请求处理
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        multipartRequest.setCharacterEncoding("UTF-8");
        Map fileMap = multipartRequest.getFileMap();
        for (Map.Entry fileInput : fileMap.entrySet()) {
            // 循环处理待上传列表
            String fileInputName = fileInput.getKey();
            List fileList = multipartRequest.getFiles(fileInputName);
            for (MultipartFile multipartFile : fileList) {
                // 上传文件实体
                FileDTO file = new FileDTO();
                String oldFileName = FilePathConfig.removeSpec(multipartFile.getOriginalFilename());
                if (!StringUtils.hasText(oldFileName)) {
                    throw new IOException("上传文件名不正确!请检查");
                }
                // 旧文件名
                file.setFileOldName(oldFileName);

                // 获取文件扩展名
                String extend = FileUtil.extName(oldFileName).toLowerCase();
                // 根据头判断格式是否正确
                String extendStr = FileType.getFileType(multipartFile.getBytes());
                if (StringUtils.hasText(extendStr) && extendStr.indexOf(extend) < 0) {
                    throw new IOException("您上传的文件格式与扩展名不符!请检查");
                }
                if (FilePathConfig.UPLOAD_FILE_ALLOW_EXTEND.toLowerCase().indexOf(extend) < 0) {
                    throw new IOException("您上传的文件格式不被允许!请检查");
                }
                file.setFileExtend(extend);

                // 新文件名
                file.setFileName(GuidUtils.getUuid32() + "." + extend);
                // 文件大小
                file.setFileSize(multipartFile.getSize());

                // 准备保存文件
                String savePath = FilePathConfig.SAVE_PATH
                        + "/" + dirName
                        + "/" + DateUtil.format(new Date(), "yyyyMMdd")
                        + "/" + file.getFileName();
                File saveFile = new File(savePath.replaceAll("//", "/"));
                FileUtil.mkParentDirs(saveFile);
                FileCopyUtils.copy(multipartFile.getBytes(), saveFile);
                // 文件访问地址
                file.setFileUrl(FilePathConfig.switchUrl(savePath));
                resultList.add(file);
            }
        }
        return resultList;
    }

    /**
     * byte[]转存文件
     *
     * @param buffer  源文件byte[]
     * @param dirName 自定义路径
     * @param extend  文件扩展名
     * @return 存储文件实体
     */
    public static FileDTO bufferToFile(byte[] buffer, String dirName, String extend) {
        try {
            // 上传文件实体
            FileDTO file = new FileDTO();
            file.setFileExtend(extend);
            // 处理文件名、路径
            file.setFileName(GuidUtils.getUuid32() + "." + extend);

            // 准备保存文件
            String savePath = FilePathConfig.SAVE_PATH
                    + "/" + dirName
                    + "/" + DateUtil.format(new Date(), "yyyyMMdd")
                    + "/" + file.getFileName();
            File saveFile = new File(savePath.replaceAll("//", "/"));
            FileUtil.mkParentDirs(saveFile);
            FileCopyUtils.copy(buffer, saveFile);
            file.setFileSize(saveFile.length());
            file.setFileUrl(FilePathConfig.switchUrl(savePath));
            return file;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy