java 本地前后端文件上传
文件上传
前置要求(三要素)
- 方式为必须为post
- 表单编码类型必须为multipart/form-data
- 文件表单项对应类型为file
后端原理
后端文件的传输基于MultipartFile类,以下为部分常用方法:
| 12
 3
 4
 5
 
 | String getOriginalFilename(); void transferTo(File dest);
 long getSize();
 byte[] getBytes();
 InputStream getInputStream();
 
 | 
实操方法
controller部分:
| 12
 3
 4
 
 | @PostMapping("/upload")public Result<String> upload(MultipartFile file) {
 return Result.success(service.upload(file));
 }
 
 | 
service部分
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 
 | @Overridepublic String upload(MultipartFile file) {
 try {
 
 var filename = file.getOriginalFilename();
 if (filename == null) throw new IOException("上传文件错误,获取不到文件名");
 
 
 var newFilename = UUID.randomUUID() + (filename.contains(".") ? filename.substring(file.getOriginalFilename().lastIndexOf(".")) : "");
 var descPath = "C:\\路径\\位置" + "\\" + newFilename;
 
 file.transferTo(new File(descPath));
 log.info("文件上传成功 {}", newFilename);
 return descPath;
 } cache(IOException e) {
 
 }
 return null;
 }
 
 | 
本地资源映射(项目路径外)
经此配置后,前端只需访问本地后端对应url即可访问文件
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 
 | @Configurationpublic class WebConfig implements WebMvcConfigurer {
 
 
 
 
 
 
 
 
 @Override
 protected void addResourceHandlers(ResourceHandlerRegistry registry) {
 log.info("配置本地资源映射...");
 
 
 var resourceHandler = "/localRes/**";
 
 var resourceLocations = "file:C:/{资源绝对路径}/";
 
 registry.addResourceHandler(resourceHandler).addResourceLocations(resourceLocations);
 }
 }
 
 |