MultipartFile重命文件名(中文文件名修改成英文)

思路:把MultipartFile先存到项目目录下(或者磁盘),存的时候修改文件名,再读取出来转成MultipartFile

1.实现代码:MultipartFile先存到项目目录,再读取出来File

public static MultipartFile newFileName(MultipartFile multipartFile, String env) {
    String path = ClassLoader.getSystemResource("").getPath().concat("new_file");
    if (!"loc".equals(env)) {
        path = System.getProperty("user.dir") + "/BOOT-INF/classes/new_file/";
    }
    log.info("新文件存储路径:{}", path);

    try {
        String ext = FileUtil.extName(multipartFile.getOriginalFilename());
        String fileName = StringHelper.getUUID(16).concat(".").concat(ext);
        File file = new File(path, fileName);
        File parentFile = file.getParentFile();
        if (!parentFile.exists()) {
            parentFile.mkdir();
        }
        multipartFile.transferTo(file);

        //再把文件读出来
        if (!file.exists()) {
            return null;
        }

        //把临时海报读取出来
        MultipartFile mf = FileHelper.file2MultipartFile(file);

        //把临时文件删除
        boolean delete = file.delete();
        log.info("合成海报临时文件删除:{}", delete);

        return mf;
    } catch (IOException e) {
        log.error(e.getLocalizedMessage());
    }

    return null;
}

2.实现代码:把File转MultipartFile

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

public static MultipartFile file2MultipartFile(File file) {
    return new CommonsMultipartFile(createFileItem(file));
}


private static FileItem createFileItem(File file) {
    DiskFileItemFactory factory = new DiskFileItemFactory(16, null);

    FileItem fileItem = factory.createItem("testField", "text/plain", true, file.getName());

    int byteRead = 0;
    byte[] buffer = new byte[8192];
    try (FileInputStream fis = new FileInputStream(file);
         OutputStream os = fileItem.getOutputStream()) {
        while ((byteRead = fis.read(buffer, 0, 8192)) != -1) {
            os.write(buffer, 0, byteRead);
        }
        os.close();
        fis.close();
    } catch (IOException e) {
        log.error(e.getLocalizedMessage());
    }

    return fileItem;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值