springboot 文件上传
实现思路于注意事项
-
使用 spring 中的 MultipartFile 实现
-
上传的文件该存储在什么地方?如果上传的是图片如何直接访问?
-
如何统一限定上传文件的大小?
核心代码
@Controller
public class FileController {
Logger logger = LoggerFactory.getLogger(this.getClass());
@RequestMapping(value = "/api/v1/upload")
public Object index() {
return "upload";
}
@Value("${web_upload_path}")
private String WEB_UPLOAD_PATH;
@RequestMapping(value = "/upload")
@ResponseBody
public JsonData upload(@RequestParam("head_img") MultipartFile file, @RequestParam String name) {
if (file.isEmpty()){
return new JsonData(-1, "请选择文件上传", null);
}
String fileName = file.getOriginalFilename();
String suffixName = fileName.substring(fileName.lastIndexOf("."));
logger.info("上传的文件: 名称 {} 后缀名 {} 大小 {}" , fileName , suffixName , file.getSize());
logger.info("上传路径 {}" , WEB_UPLOAD_PATH);
fileName = UUID.randomUUID() + suffixName;
logger.info("新的文件名 {}" , fileName);
File dest = new File(WEB_UPLOAD_PATH + fileName);
try {
file.transferTo(dest);
return new JsonData(0, fileName);
} catch (Exception e) {
logger.error(e.getMessage());
}
return new JsonData(-1, "fail to save ", null);
}
}
使用MultipartFile 接收上传的文件
MultipartFile 中的常用方法
- String fileName = file.getOriginalFilename(); //获取文件的名称
- file.transferTo(dest); //文件的拷贝
上传的文件该存储在什么地方?如果上传的是图片如何直接访问?
本文中上传的路径采用的绝对路径 , 如果上传的是图片想要直接访问把当前路径配置在application.properties文件中 ,使用 spring.resources.static-locations。
-
application.yml 配置
spring: profiles: active: dev server: port: 8080
-
application-dev.yml配置
web_upload_path: D:/uploadFile/ spring: resources: static-locations: classpath:/METAINF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${web_upload_path}
-
application-pro.yml 配置
web_upload_path: /opt/uploadFile/
spring:
resources:
static-locations: classpath:/METAINF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${web_upload_path}
如何统一限定上传文件的大小?
@Configuration
public class FileUploadConfig {
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
//单个文件最大
factory.setMaxFileSize(DataSize.parse("1MB")); //KB,MB
// 设置总上传数据总大小
factory.setMaxRequestSize(DataSize.parse("100MB"));
return factory.createMultipartConfig();
}
}
项目代码地址:https://gitee.com/flashfeng/spring-test.git
关注我的技术公众号alistarfeng,每周都有优质技术文章推送。
微信扫一扫下方二维码即可关注: