一、文件上传核心实现
java
// PersonController.java
@PostMapping("/excelUpload")
public Result excelUpload(@RequestParam("uploadExcel") MultipipartFile multipartFile) {
// 1. 获取原始文件名
String fileName = multipartFile.getOriginalFilename();
// 2. 构建存储路径
Path path = Paths.get(excelpath + fileName);
System.out.println("文件保存路径: " + path);
// 3. 保存文件到服务器
try {
multipartFile.transferTo(path);
} catch (IOException e) {
e.printStackTrace();
}
// 4. 返回成功响应
return Result.ok().put("data", fileName);
}
二、关键技术组件解析
-
MultipartFile接口
-
Spring提供的文件上传处理接口
-
核心方法:
-
getOriginalFilename()
: 获取原始文件名 -
transferTo()
: 将文件保存到指定位置 -
getInputStream()
: 获取文件输入流
-
-
-
文件路径配置
bash# application.properties file-upload.url=D:/javacode/community_vue/community/FileXls/
-
通过
@Value
注解注入配置路径bash@Value("${file-upload.url}") private String excelpath;
-
路径处理工具
-
Paths.get()
: 构建平台无关的文件路径 -
transferTo()
: 将上传文件保存到指定位置
-
-
三、静态资源映射配置
java
// WebMvVCconfigruation.java
@Configuration
public class WebMvVCconfigruation implements WebMvcConfigurer {
@Value("${file-upload.url}")
private String excelPath;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 映射/FileXls/**到本地文件系统
registry.addResourceHandler("/FileXls/**")
.addResourceLocations("file:" + excelPath);
}
}
四、完整上传流程
五、前端调用示例
html
<!-- HTML表单 -->
<form action="/sys/person/excelUpload" method="post" enctype="multipart/form-data">
<input type="file" name="uploadExcel" accept=".xls,.xlsx">
<button type="submit">上传Excel</button>
</form>
<!-- AJAX调用 -->
<script>
function uploadExcel(file) {
const formData = new FormData();
formData.append('uploadExcel', file);
fetch('/sys/person/excelUpload', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
console.log('上传成功:', data.data);
// 访问上传的文件: http://localhost:8080/FileXls/filename.xls
});
}
</script>
六、中文文件名乱码
html
// 在application.properties中添加
spring.servlet.encoding.force=true
spring.servlet.encoding.charset=UTF-8
七、大文件上传优化
java
// 分块上传处理
@PostMapping("/chunkUpload")
public Result chunkUpload(@RequestParam Chunk chunk) {
// 实现分片合并逻辑
}
完整实现代码已包含在提供的Java文件中,通过结合Controller层的上传处理和MVC配置层的静态资源映射,实现了完整的文件上传和访问解决方案。