一.文件上传与下载
1.文件上传
将本地图片,视频音频等文件上传服务器,如发微博朋友圈
2.文件下载
将文件从服务器传到本地计算机
在浏览器上下载有两种表现形式
- 以附件形式下载
- 直接在浏览器中打开
二.前端要求
对表单形式有要求如下,封装的组件也以此为底层
三.服务端接收
Spring框架封装组件
文件下载
四.代码实现
/**
* 文件上传
* @param file
* @return
*/
@PostMapping("/upload")
public Result<String> upload(MultipartFile file) throws IOException {
//file是一个临时文件,需要转存到指定位置,否则本次请求结束后会被删除
log.info(file.toString());
//原始文件名
String originalFilename = file.getOriginalFilename();
//获取文件格式
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
//使用UUID重新生成文件名,放置文件覆盖
String fileName = UUID.randomUUID().toString() + suffix;
//判断当前目录是否存在,不存在则创建
File dir = new File(basePath);
if(!dir.exists()){
dir.mkdirs();
}
System.out.println(basePath+fileName);
//存文件到指定位置
file.transferTo(new File(basePath+fileName));
return Result.Success(fileName);
}
/**
* 文件下载
* 返回值为void即可,通过输出流下载文件
* @param name
* @param response
* @throws IOException
*/
@GetMapping("/download")
public void download(String name, HttpServletResponse response) throws IOException {
//输入流,通过输入流读取文件内容
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();
}
@PostMapping("/test")
public String tset(){
return "hello springboot!";
}