java 本地前后端文件上传
文件上传
前置要求(三要素)
- 方式为必须为
post
- 表单编码类型必须为
multipart/form-data
- 文件表单项对应类型为
file
后端原理
后端文件的传输基于MultipartFile
类,以下为部分常用方法:
1 2 3 4 5
| String getOriginalFilename(); void transferTo(File dest); long getSize(); byte[] getBytes(); InputStream getInputStream();
|
实操方法
controller
部分:
1 2 3 4
| @PostMapping("/upload") public Result<String> upload(MultipartFile file) { return Result.success(service.upload(file)); }
|
service
部分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| @Override public 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
即可访问文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| @Configuration public class WebConfig implements WebMvcConfigurer {
@Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { log.info("配置本地资源映射..."); var resourceHandler = "/localRes/**"; var resourceLocations = "file:C:/{资源绝对路径}/"; registry.addResourceHandler(resourceHandler).addResourceLocations(resourceLocations); } }
|