You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring 6.x.x中不使用MockMultipartFile创建MultipartFile的方法

在Spring 6中从java.io.File创建MultipartFile的替代方案

由于CommonsMultipartFile在Spring 6中已被废弃,且MockMultipartFile仅适用于测试场景,最稳妥且符合生产环境要求的方式是自行实现MultipartFile接口,直接基于java.io.File封装所需功能,无需依赖任何废弃或测试专用类。

自定义MultipartFile实现

以下是一个简洁且合规的实现,覆盖MultipartFile接口的所有核心方法:

import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.nio.file.Files;

public class FileBasedMultipartFile implements MultipartFile {

    private final File file;
    private final String name;
    private final String originalFilename;
    private final String contentType;

    public FileBasedMultipartFile(File file, String name, String originalFilename, String contentType) {
        this.file = file;
        this.name = name;
        this.originalFilename = originalFilename;
        this.contentType = contentType;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public String getOriginalFilename() {
        return originalFilename;
    }

    @Override
    public String getContentType() {
        return contentType;
    }

    @Override
    public boolean isEmpty() {
        return file.length() == 0;
    }

    @Override
    public long getSize() {
        return file.length();
    }

    @Override
    public byte[] getBytes() throws IOException {
        return Files.readAllBytes(file.toPath());
    }

    @Override
    public InputStream getInputStream() throws IOException {
        return new FileInputStream(file);
    }

    @Override
    public void transferTo(File dest) throws IOException, IllegalStateException {
        Files.copy(file.toPath(), dest.toPath());
    }
}

使用示例

在需要生成MultipartFile的业务代码中,直接实例化这个自定义类即可:

public MultipartFile buildMultipartFile(File actualFile, String fieldName, String fileName, String mimeType) {
    try {
        return new FileBasedMultipartFile(actualFile, fieldName, fileName, mimeType);
    } catch (Exception e) {
        throw new GoogleConversionFailedException("Cannot build MultipartFile", e);
    }
}

额外说明

  • 该实现完全遵循MultipartFile接口规范,所有方法均基于底层java.io.File实现,适配生产环境的各种场景。
  • 无需依赖Apache Commons FileUpload的废弃组件,完全兼容Spring 6的生态。
  • 如果需要扩展功能(比如临时文件自动清理、大文件内存优化),可以在该类基础上进一步调整,例如实现AutoCloseable接口来管理资源生命周期。

内容的提问来源于stack exchange,提问作者Bartłomiej Adamczyk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 18:03:11