概述
大一点的公司中数据会有专门服务器保存,只需要按照给定的地址,将文件写入到相应的地址中即可,而对于下载,则从服务器中获取数据返回浏览器
文件上传
单文件上传
文件上传,重要的是知道上传文件的路径是哪、再有一个是文件名不用重复、然后是截取一下文件后缀名。文件名不重复可以通过new Date().getTime()得到,文件后缀名是最后一个点(.)及后面的英文组成,比如(123.jpg),通过MultipartFile 的getOriginalFilename返回的是一个字符串类型的文件名,字符串中可以通过lastIndexOf返回字符出现的位置及其后面字符串,这样就可以获得后缀名了,拼接一下,路径和文件名就有了,用transferTo输出就可以了
//上传图片
@RequestMapping("/uploadPic")
public void uploadPic(@RequestParam("picName") MultipartFile picName) throws IOException {
/*URL resource = ChatstatisController.class.getResource("/resources/pictures");
resource.*/
String path = "D:/";
//路径+名字
String originalFilename = picName.getOriginalFilename();
int i = originalFilename.lastIndexOf(".");
String newName = new Date().getTime()+originalFilename.substring(i);
File dest = new File(path,newName);
picName.transferTo(dest);
System.out.println(path);
}
多文件上传
//多图片上传
@RequestMapping("/uploadPicList")
public void uploadPicList(MultipartFile[] files) throws IOException {
String path = "D:/";
for(MultipartFile file :files){
//路径+名字
String originalFilename = file.getOriginalFilename();
int i = originalFilename.lastIndexOf(".");
String newName = new Date().getTime()+originalFilename.substring(i);
File dest = new File(path,newName);
file.transferTo(dest);
}
}
多文件上传和单文件上传思路大体都差不多,在单文件上传的基础上加一个for循环就可以了,那么使用postman如何测试呐?想到的是既然MultipartFile[]是一个数组,那么只要根据文件名files相同,应该就可以直接注到MultipartFile[]中了
来测一下
ok,说明当入参是一个数组时,只要参数名相同,springboot在接收参数时都会注入到相应的数组中
完成
文件下载
对于下载来说,一般是遍历下载目录的列表,用户点击下载时,传文件名给后端,后端,根据路径获取文件然后将文件返回
//文件下载
@RequestMapping("downloadPic")
public void downloadPic(HttpServletRequest request,HttpServletResponse response,String fileName){
//
response.setCharacterEncoding(request.getCharacterEncoding());
response.setContentType("application/octet-stream");
FileInputStream fis = null;
try {
File file = new File("D:/candelete/"+fileName);
fis = new FileInputStream(file);
response.setHeader("Content-Disposition", "attachment; filename="+file.getName());
IOUtils.copy(fis,response.getOutputStream());
response.flushBuffer();
} catch (Exception e) {
e.printStackTrace();
}
}