文件上传/下载
springboot上传/下载
一、文件上传,springboot-web依赖有:MultipartFile
1、真实名称和保存名称都可以存数据库,避免有的需求需要原样上传名称;
2、保存最好不要有IP,维护的坑不少
3、上传大小需要配置一下,不然超过Tomcat默认值就异常(下方配置)
4、采用年/月/日文件夹存储,上传量大的情况可以精确到时/分文件夹
5、对废弃文件可以搞一个定时清理,条件自定,且对账号限制上传存储大小,避免非法对系统各种上传
spring:
servlet:
multipart:
max-file-size: 10485760
@PostMapping("/upload")
public void upload(@RequestParam("file")MultipartFile[] multipartFile) {
Map<String, Object> map = new HashMap<>();
if(multipartFile.length > 4) log.info("一次最多不超过4个文件");
for(MultipartFile file : multipartFile) {
if(file.getSize() > 1024 * 1024 * 5) log.info("大小不超过5M");
String fileName = file.getOriginalFilename();// 上传真实文件名
String fileTypes[] = {".jpg", ".jpeg", ".bmp", ".png", ".pdf", ".doc", ".docx", ".ppt", ".pptx", ".zip", ".rar", ".xlsx", ".xls"};
String fileType = fileName.substring(fileName.lastIndexOf(".")); //获取后缀
if(!isFile(fileTypes, fileType)) log.info("文件格式不支持");
String dateYMD = this.getDateYMD("yyyy-MM-dd"); //保存在磁盘的随机名字
String[] splitDate = dateYMD.split("-");
String fileUri = Integer.parseInt(splitDate[0]) + "/" + Integer.parseInt(splitDate[1]) + "/" + Integer.parseInt(splitDate[2]);
File path = new File(uploadFolder+fileUri);
if(!path.exists()) path.mkdirs();
String fileUUID = IdWorker.getIdStr() + fileType;//保存在磁盘的随机名字
File dir = new File(path, fileUUID);
try {
file.transferTo(dir);
} catch(Exception e) {
log.info("上传失败");
}
map.put("src", "127.0.0.1/upload/" + fileUri + "/" + fileUUID);//多个可存list用于前端展示
}
log.info("上传成功");
}
//判断后缀文件类型匹配
private boolean isFile(String[] fileTypes, String fileType) {
boolean flag = false;
for(int i = 0; i < fileTypes.length; i++) {
if(fileTypes[i].equalsIgnoreCase(fileType)) {
flag = true;
break;
}
}
return flag;
}
public static String getDateYMD(String formStyle) {
SimpleDateFormat format = new SimpleDateFormat(formStyle);
return format.format(new Date());
}
二、文件下载
1、给前端返回可以访问的路径即可如:http://127.0.0.1/upload/yyyy/mm/dd/1262592400254103554.jpg 如:window.location.href = '资源地址'
2、输出输出流将制定路径下的文件进行输出下载,不太实用,省略
三、配置文件
1、application.yml配置上传文件相关
file: path: /upload/** address: c:\\upload\\ #/opt/project/upload/
2、配置文件磁盘url 映射,配置server虚拟路径
@Configuration public class WebConfig implements WebMvcConfigurer { @Value("${file.path}") private String path; @Value("${file.address}") private String address; @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // handler为前台访问的目录,locations为files相对应的本地路径 registry.addResourceHandler(path).addResourceLocations("file:"+address); } }
浙公网安备 33010602011771号