1.先在application.yml自定义一个临时存储图片位置
2.
public class CommonController {
/**
* 获取临时存放的磁盘
*/
@Value("${reggie.path}")
private String basePath;
/**
* 文件上传
* @param file
* @return
*/
@PostMapping("/upload")
public R<String> upload(MultipartFile file) {
log.info(file.toString());
// 1.获取文件原始名,and 截取文件后缀
String orginalFilename = file.getOriginalFilename();
String suffix = orginalFilename.substring(orginalFilename.lastIndexOf("."));
//2.使用UUID重新生成文件名,防止文件名重复造成文件覆盖
String filename = UUID.randomUUID().toString()+suffix;
//3.创建一个目标对象,并判断当前目录是否存在,不存在就创建
File dir = new File(basePath);
if (!dir.exists()) {
dir.mkdirs();
}
//4. 将临时文件转存到指定位置
try {
file.transferTo(new File(basePath+filename));
}catch (Exception e) {
e.printStackTrace();
}
// 5.返回文件的名字,供文件下载的时候路径通过名字调用
return R.success(filename);
}
/**
* 文件下载, 当文件上传成功后立即 下载,并通过response进行传输
* @param name
*/
@GetMapping("/download")
public void download(String name, HttpServletResponse response) {
try {
// 1.输入流,通过读取文件
FileInputStream fileInputStream = new FileInputStream(new File(basePath+name));
// 2.输出流,通过输出流写回浏览器
ServletOutputStream outputStream = response.getOutputStream();
int len=0;
byte[] bytes = new byte[1024];
while ((len = fileInputStream.read(bytes))!=-1) {
outputStream.write(bytes,0,len);
outputStream.flush();
}
//3.关闭资源
outputStream.close();
fileInputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}