MultipartFile 转换为 File 并保存

Java常用方法   2025-01-12 15:18   217   0  
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;

/**
 * 将 MultipartFile 转换为 File 并保存到本地
 *
 * @author chenwc
 * @date 2023/5/21 10:06
 */
public class MultipartFileToFile {

    private static final Logger log = LoggerFactory.getLogger(MultipartFileToFile.class);

    /**
     * 将 MultipartFile 转换为 File
     * @param outFilePath 输出文件路径参数
     * @param multiFile 参数
     * @return 执行结果
     */
    public static File multipartFileToFile(String outFilePath, MultipartFile multiFile) {
        // 获取文件名
        if (null == multiFile) {
            log.info("传入的 MultipartFile 为空!");
            return null;
        }
        String fileName = multiFile.getOriginalFilename();
        if (null == fileName || fileName.isEmpty()) {
            log.info("传入的 MultipartFile 文件名为空!");
            return null;
        }
        try {
            File toFile;
            InputStream ins = multiFile.getInputStream();
            //指定存储路径
            toFile = writeFileByInputStream(ins, outFilePath + fileName);
            return toFile;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 把 InputStream 流写入本地文件(字节流)
     * @param inputStream InputStream 流
     * @param filePath 待写入本地文件全路径+文件名
     * @return File
     */
    public static File writeFileByInputStream(InputStream inputStream, String filePath){
        File file = new File(filePath);
        FileOutputStream fos = null;
        log.info("写入文件路径: {}", file.getAbsolutePath());
        try {
            if (!file.exists()) {
                if (!mkdirParents(file)) {
                    log.info("创建父级目录失败!");
                    return null;
                }
                if (!file.createNewFile()) {
                    log.info("文件不存在,创建文件失败!");
                    return null;
                } else {
                    log.info("文件不存在,创建文件成功!");
                }
            }
            long start = System.currentTimeMillis();
            log.info("开始写入文件............");
            fos = new FileOutputStream(file);
            byte[] b = new byte[1024];
            while ((inputStream.read(b)) != -1) {
                // 写入数据
                fos.write(b);
            }
            long end = System.currentTimeMillis();
            log.info("写入文件成功............");
            log.info("写入文件耗时: {} ms", end - start);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != inputStream) {
                    inputStream.close();
                }
                if (null != fos) {
                    //保存数据
                    fos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return file;
    }

    /**
     * 判断文件的父级目录是否存在,不存在则创建
     * @param file 文件
     * @return true 父级目录存在或创建父级目录成功, false创建父级目录失败
     */
    private static boolean mkdirParents(File file){
        if (!file.getParentFile().exists()) {
            return file.getParentFile().mkdirs();
        }
        else {
            return true;
        }
    }
}


下一篇
博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。