Java重命名MultipartFile
时间: 2025-01-03 16:39:00 浏览: 24
### 如何在 Java 中重命名 MultipartFile 对象
`MultipartFile` 接口本身并不提供直接修改文件名的方法。然而,可以通过创建一个新的 `File` 或者自定义实现来间接达到更改名称的效果。
#### 方法一:保存到临时文件并重新上传
通过将原始的 `MultipartFile` 数据写入一个具有新名字的目标文件中,可以认为实现了“重命名”。下面是一个简单的例子:
```java
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileUtil {
public static void saveAs(MultipartFile multipartFile, String targetFileName) throws IOException {
try (FileOutputStream fos = new FileOutputStream(new File(targetFileName))) {
fos.write(multipartFile.getBytes());
}
}
}
```
此方法会把传入的 `multipartFile` 的字节流写出至指定路径下的目标文件 `targetFileName`[^1]。
#### 方法二:封装新的 MultipartFile 实现类
如果希望保持操作对象仍为 `MultipartFile` 类型,则可以选择继承或模仿其实现方式构建自己的版本。这里给出一种基于内存的方式(适用于较小文件),它允许设置任意原文件名和内容类型:
```java
import org.springframework.core.io.InputStreamSource;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
public final class CustomMultipartFile implements InputStreamSource {
private byte[] content;
private String originalFilename;
private String contentType;
@Override
public InputStream getInputStream() {
return new ByteArrayInputStream(content);
}
/**
* 构造函数.
*/
public CustomMultipartFile(byte[] content, String originalFilename, String contentType) {
this.content = content;
this.originalFilename = originalFilename;
this.contentType = contentType;
}
// 提供静态工厂方法用于转换现有的 MultipartFile 并赋予新名称
public static MockMultipartFile fromExistingWithNewName(MultipartFile source, String newName){
try{
return new MockMultipartFile(
"file", // 表单字段名
newName,
source.getContentType(),
source.getInputStream()
);
}catch(IOException e){
throw new RuntimeException(e.getMessage(),e);
}
}
}
```
上述代码片段展示了如何利用 Spring Framework 自带的 `MockMultipartFile` 来快速生成带有不同文件名的新实例[^2]。
阅读全文