Spring boot文件上传下载的三种方式
Java •
以前写SSM项目的时候,部署如果是用Tomact的话,上传文件存放会变得非常简单,文件上传可以传到webapp下。是当你使用SpringBoot的jar包发布项目的时候,你会发现,你不能像以前一样操作文件了。解决SpringBoot项目的文件上传和下载至少有三种方式:
一、将文件存放在硬盘的某个目录,用Java去读取下载:
适用场景:这种方式适用于小项目,单个服务器部署。
上传文件:
/**
* 上传文件
*/
@RequestMapping(method = RequestMethod.POST, path = "/upload")
@ResponseBody
public String upload(@RequestPart("file") MultipartFile file) {
try {
// 得到上传时的文件名
String originalFilename = file.getOriginalFilename();
String fileSavePath = "/myproject/upload/";
file.transferTo(new File(fileSavePath + originalFilename));
} catch (Exception e) {
e.printStackTrace();
return "上传失败";
}
return "上传成功";
}
下载文件:
/**
* 下载文件
*
*/
@RequestMapping("/{fileName}")
public void renderPicture(@PathVariable("fileName") String fileName, HttpServletResponse response) {
try {
byte[] bytes = FileUtil.toByteArray("/myproject/files/" + fileName);
response.getOutputStream().write(bytes);
} catch (Exception e) {
//如果找不到文件就返回一个默认图片
try {
response.sendRedirect("/static/img/default.gif");
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
二、将文件存放在硬盘的某个目录,配置Nginx去下载;
适用场景:这种方式适用于不考虑分布式部署的项目。
上传方式跟上面的一样。下载文件则需要配置Nginx去访问文件。
三、使用云存储上传下载。
适用场景:大型项目建议使用,尤其是分布式部署的项目。
阿里云、七牛云、腾讯云等等,有好多家,都可以实现。有的可以通过Javascript前端上传,有的则需要上传到服务器然后再往云存储上传。云存储提供商会提供免费子域名来访问,有的也可以绑定自己的域名,还可以提供图片防盗链等等功能。