org.springframework.boot
spring-boot-starter-web
cn.hutool
hutool-all
${hutool.version}
文件上传功能真正需要的依赖只有spring-boot-starter-web,hutool-all只是笔者平时习惯使用的一个工具类库。如果你还不了解hutool-all推荐你花点时间了解一下,很香!如官网所讲“Hutool中的工具方法来自每个用户的精雕细琢”,它能大大提高你的开发效率。
# 端口号
server.port=9090
# 开启文件上传
spring.servlet.multipart.enabled=true
# 上传文件默认存储路径(文件夹)
spring.servlet.multipart.location=E:/learn-springboot-upload/upload-files
# 限制单个文件最大大小
spring.servlet.multipart.max-file-size=1MB
# 限制所有文件最大大小
spring.servlet.multipart.max-request-size=10MB注释写得很详细了,不多说。
1 上传文件重新命名,新的文件名格式如下:
private static final String FILE_NAME_PATTERN = "{}_{}";第一个{}放的是上传时间,格式是yyyyMMddHHmmss,精确到秒。
第二个{}放的是上传文件的原始文件名。
2 方式一:使用org.springframework.web.multipart.MultipartFile接收上传文件
@RequestMapping("/upload/multipart")
public Object uploadMultipart(MultipartFile file) {
// 上传文件的原始文件名
String originalFilename = file.getOriginalFilename();
log.info("上传文件的原始文件名:{}", originalFilename);
// 文件名:日期_原始文件名
String fileName = StrUtil.format(FILE_NAME_PATTERN, DateUtil.format(new Date(), "yyyyMMddHHmmss"), originalFilename);
log.info("格式化后的文件名:{}", fileName);
File dest = new File(fileName);
try {
file.transferTo(dest);
} catch (IOException e) {
log.info("上传文件失败!", e);
return result(500, "上传失败!");
}
return result(200, "上传成功!");
}3 方式二:使用javax.servlet.http.Part接收上传文件
@RequestMapping("/upload/part")
public Object uploadPart(Part file) {
String originalFilename = file.getSubmittedFileName();
log.info("上传文件的原始文件名:{}", originalFilename);
// 文件名:日期_原始文件名
String fileName = StrUtil.format(FILE_NAME_PATTERN, DateUtil.format(new Date(), "yyyyMMddHHmmss"), originalFilename);
log.info("格式化后的文件名:{}", fileName);
try {
file.write(fileName);
} catch (IOException e) {
log.info("上传文件失败!", e);
return result(500, "上传失败!");
}
return result(200, "上传成功!");
}如果你没有自定义 MultipartResolver 对象,Spring Boot 会为你自动创建 MultipartResolver 对象,实际为 StandardServletMultipartResolver 。
如果上传的单个文件的大小超出限制,会报如下错误:
The field file exceeds its maximum permitted size of 1048576 bytes.其中 1048576 是我设置的单个文件最大大小限制。
我为了省时间,并没有写 HTML 页面去测试接口,使用的是 Postman 工具测试接口。
| 留言与评论(共有 0 条评论) “” |