文件上传
这里file变量名必须和前端页面保存一致,才能完成上传。
这里的file只是一个临时文件,需要转存到指定位置,否则本次请求完成后就会删除。
指定位置可以在yml中进行配置,再使用@value注解进行读取
利用getOriginalFilename()函数来获取原文件的文件名,使用UUID.randomUUID().toString()随机生成一个文件名,防止文件名重复导致覆盖,再使用substring(originalFilename.lastIndexOf("."))函数来获取源文件的后缀名进行拼接得到一个新的文件名
使用transferTo()函数转存
文件下载
文件下载本质上是通过输入流读取文件内容,再通过输出流将文件写回给浏览器进行回显,这里返回的是图片,所有需要设置response.setContentType("image/jpeg");再进行常规的读写操作
/**
* 文件下载
* @param name
* @param response
*/
@GetMapping("/download")
public void download(String name, HttpServletResponse response){
try {
//输入流,通过输入流读取文件内容
FileInputStream fileInputStream=new FileInputStream(new File(basePath+name));
//输出流,通过输出流将文件写回给浏览器,在浏览器展示图片了
ServletOutputStream outputStream=response.getOutputStream();
//设置响应回去的文件
response.setContentType("image/jpeg");
int len=0;
byte[] bytes=new byte[1024];
while ((len=fileInputStream.read(bytes))!=-1){
outputStream.write(bytes,0,len);
//刷新
outputStream.flush();
//释放资源
/* outputStream.close();
fileInputStream.close();*/
}
} catch (Exception e) {
e.printStackTrace();
}
}