java MultipartFile上传文件重命名
时间: 2023-11-24 12:52:35 浏览: 320
在Java中,可以使用MultipartFile接口来上传文件并重命名。以下是一个示例代码,演示如何使用MultipartFile接口上传文件并重命名:
```java
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) {
String fileName = file.getOriginalFilename();
String suffix = fileName.substring(fileName.lastIndexOf("."));
String newFileName = UUID.randomUUID().toString() + suffix;
File dest = new File("upload/" + newFileName);
try {
file.transferTo(dest);
return "上传成功";
} catch (IOException e) {
e.printStackTrace();
return "上传失败";
}
}
```
在上面的代码中,我们首先获取上传文件的原始文件名,然后使用UUID生成一个新的文件名,并将原始文件名的后缀拼接到新文件名上。最后,我们将上传的文件保存到指定的目录中。
相关问题
Java重命名MultipartFile
### 如何在 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]。
MultipartFile重命名
可以使用以下代码对MultipartFile进行重命名:
```java
MultipartFile file = ...; // 获取上传的文件
String originalFilename = file.getOriginalFilename(); // 获取原始文件名
String suffix = originalFilename.substring(originalFilename.lastIndexOf(".")); // 获取文件后缀名
String newFilename = UUID.randomUUID().toString() + suffix; // 生成新的文件名
File dest = new File("上传目录/" + newFilename); // 创建上传目录下的新文件
file.transferTo(dest); // 将上传的文件保存到新文件中
```
其中,UUID.randomUUID().toString()用于生成一个随机的字符串作为新文件名,suffix用于获取原始文件名的后缀名。
阅读全文
相关推荐













