在 Java 中,使用 MultipartFile
获取上传文件的文件名有几种不同的方式,下面我将为您介绍每种方式的步骤流程,并提供相应的示例代码和 Maven/Gradle 依赖坐标。
假设您正在开发一个基于 Spring 框架的 Web 应用,并且已经有一个包含文件上传功能的控制器方法。我们将在这个背景下进行实现。
这是 MultipartFile
接口内置的方法,用于获取上传文件的原始文件名。
步骤流程:
MultipartFile
对象)。getOriginalFilename()
方法获取文件名。示例代码:
import org.springframework.web.multipart.MultipartFile;
// 在控制器方法中
public String uploadFile(@RequestParam("file") MultipartFile file) {
if (!file.isEmpty()) {
String fileName = file.getOriginalFilename();
// 其他处理逻辑
return "File name: " + fileName;
}
return "File upload failed.";
}
Maven 依赖:
<!-- Spring Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>版本号</version>
</dependency>
这种方法将上传文件的内容保存到服务器上的某个位置,然后通过 Path
对象获取文件名。
步骤流程:
Paths.get()
获取 Path
对象,然后通过 getFileName()
获取文件名。示例代码:
import org.springframework.web.multipart.MultipartFile;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
// 在控制器方法中
public String uploadFile(@RequestParam("file") MultipartFile file) {
if (!file.isEmpty()) {
try {
// 将文件保存到服务器的某个位置
String uploadDir = "/path/to/upload/directory/";
Path filePath = Paths.get(uploadDir, file.getOriginalFilename());
Files.write(filePath, file.getBytes());
// 获取文件名
String fileName = filePath.getFileName().toString();
// 其他处理逻辑
return "File name: " + fileName;
} catch (Exception e) {
e.printStackTrace();
return "File upload failed.";
}
}
return "No file uploaded.";
}
Maven 依赖:
<!-- Spring Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>版本号</version>
</dependency>
在某些情况下,上传的文件名可能被浏览器重命名。可以从请求头部的 Content-Disposition
信息中获取真实的文件名。
步骤流程:
Content-Disposition
信息中提取文件名。示例代码:
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.bind.annotation.RequestHeader;
// 在控制器方法中
public String uploadFile(
@RequestParam("file") MultipartFile file,
@RequestHeader("Content-Disposition") String contentDispositionHeader) {
if (!file.isEmpty()) {
// 从Content-Disposition中提取文件名
String[] parts = contentDispositionHeader.split(";");
String fileNamePart = parts[2].split("=")[1].replace("\"", "");
// 获取文件名
String fileName = fileNamePart.substring(fileNamePart.lastIndexOf("/") + 1);
// 其他处理逻辑
return "File name: " + fileName;
}
return "No file uploaded.";
}
Maven 依赖:
<!-- Spring Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>版本号</version>
</dependency>
请注意,示例代码中的版本号需要替换为您正在使用的 Spring Boot 版本号。在实际开发中,您还需要根据自己的项目结构和需求进行适当的调整。