【Java将File完美转为MultipartFile】:亲测有效

由于multipartFile有很多有用的api, 但是有时候我们接收到前台的参数是文件名和文件内容, 而不是文件, 此时不能使用multipartFile接收, 导致处理起来很不方便, 比如我用minio上传文件, minio需要multipartFile类型的文件, 而我拿到前端传来的文件名和文件内容只能自己通过File类创建文件, 所以如果想用multipartFile类型就需要自己转换, 然而天不遂人愿, 并没有现成的api直接将file类型转化为multipartFile类型, 我从网上搜了很多, 并没有完整解决问题, 在我自己摸索研究之下, 根据网上提供的代码修改, 完美解决将file类型转化为multipartFile类型, , 希望对你有所帮助!

注意: 不要引用spring-web 6.0以上版本, 此处我用的是spring-web 5.2.13.RELEASE

<dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-webartifactId>
    <version>5.2.13.RELEASEversion>
dependency>

话不多说上代码:

 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;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;/**
  * @Author :ZhangRY
  * @Time :2024-07-12 08:51:57
  * @Description :file类型完美转换为multipartFile类型
  */
 public class FileUtil {

    public static MultipartFile fileToMultipartFile(File file) {
        FileItem fileItem = createFileItem(file);
        MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
        return multipartFile;
    }

    public static FileItem createFileItem(File file) {

        DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory(16, null);
        Path path = Paths.get(file.getAbsolutePath());
        String contentType;
        try {
            contentType = Files.probeContentType(path);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        FileItem fileItem = diskFileItemFactory.createItem("file", contentType, true, file.getName());

        int read = 0;
        byte[] buffer = new byte[1024];

        try {
            FileInputStream is = new FileInputStream(file);
            OutputStream os = fileItem.getOutputStream();
            while ((read = is.read(buffer, 0, 1024)) != -1) {
                os.write(buffer, 0, read);
            }
            Files.copy(file.toPath(), os);
            os.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return fileItem;
    }
}

你可能感兴趣的:(java)