如何优雅的将MultipartFile和File互转


在 Spring 中,MultipartFile 是用于处理文件上传的接口,而 File 是 Java 中用于表示文件的类。要在它们之间进行转换,可以通过以下方法:

1. MultipartFile 转 File:

import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;

public class FileConverter {

    public static File convertMultipartFileToFile(MultipartFile multipartFile) throws IOException {
        File file = new File(multipartFile.getOriginalFilename());
        try {
            Path filePath = file.toPath();
            Files.copy(multipartFile.getInputStream(), filePath, StandardCopyOption.REPLACE_EXISTING);
            return file;
        } catch (IOException e) {
            throw new IOException("Failed to convert MultipartFile to File", e);
        }
    }
}

上述代码通过创建一个临时文件,并将 MultipartFile 的内容复制到该文件中。注意要使用 getInputStream() 获取 MultipartFile 的输入流。

2. File 转 MultipartFile:

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.InputStream;

public class FileConverter {

    public static MultipartFile convertFileToMultipartFile(File file) throws IOException {
        try (InputStream inputStream = new FileInputStream(file)) {
            return new CommonsMultipartFile(inputStream);
        } catch (IOException e) {
            throw new IOException("Failed to convert File to MultipartFile", e);
        }
    }
}

上述代码通过创建一个 CommonsMultipartFile 对象,将 File 的内容作为输入流传递给该对象。注意要在完成操作后关闭输入流。

使用示例:

import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        // 示例:MultipartFile 转 File
        MultipartFile multipartFile = getMultipartFile(); // 你的 MultipartFile 对象
        File file = FileConverter.convertMultipartFileToFile(multipartFile);

        // 示例:File 转 MultipartFile
        File anotherFile = getAnotherFile(); // 你的 File 对象
        MultipartFile convertedMultipartFile = FileConverter.convertFileToMultipartFile(anotherFile);
    }

    private static MultipartFile getMultipartFile() {
        // 实际应用中,你需要从上传的文件中获取 MultipartFile 对象
        // 这里仅为示例,实际使用时需要替换为你的逻辑
        return null;
    }

    private static File getAnotherFile() {
        // 实际应用中,你需要获取 File 对象
        // 这里仅为示例,实际使用时需要替换为你的逻辑
        return null;
    }
}

请注意,上述示例中的 getMultipartFilegetAnotherFile 方法是示例方法,实际应用中需要根据你的业务逻辑获取相应的 MultipartFileFile 对象。


原文链接:codingdict.net