MultipartFile是SpringMVC提供简化上传操作的工具类。在不使用框架之前,都是使用原生的HttpServletRequest来接收上传的数据,文件是以二进制流传递到后端的,然后需要我们自己转换为File类。使用了MultipartFile工具类之后,我们对文件上传的操作就简便许多了。
MultipartFile方法详解
String getName() 返回参数的名称
String getOriginalFilename(); 获取源文件名称
String getContentType() 返回文件的内容类型
isEmpty() 判断是否为空,或者上传的文件是否有内容
Long getSize() 返回文件大小 以字节为单位
byte[] getBytes() 将文件内容转化成一个byte[] 返回
InputStream getInputStream() throws IOException;返回InputStream读取文件的内容
transferTo(File dest) 用来把 MultipartFile 转换换成 File
文件上传代码java后端代码如下,首先取出MulipartFile的源文件名,拼接字符串构成File文件的磁盘路径,然后通过multipartFile的transferTo方法转化成File文件,后将该文件的文件名,文件大小,磁盘存储路径存放到数据库中。至此文件上传基本完成。
@RequestMapping("/test2/imp") @ResponseBody public String file(@RequestParam("file") MultipartFile multipartFile) throws Exception { File file=new File("D:\\test\\"+multipartFile.getOriginalFilename()); if(multipartFile.isEmpty()){ throw new Exception("文件不能为空"); } String filename = multipartFile.getOriginalFilename(); long size = multipartFile.getSize(); multipartFile.transferTo(file); String absolutePath = file.getAbsolutePath(); Myfile myfile=new Myfile(); myfile.setName(filename); myfile.setPath(absolutePath); myfile.setSize(size); QueryWrapper<Myfile> queryWrapper=new QueryWrapper<>(); queryWrapper.eq("name",filename); Myfile myfile1 = myfileMapper.selectOne(queryWrapper); if(myfile1==null) myfileMapper.insert(myfile); return "success"; }
文件下载java后端代码如下,首先根据文件名从数据库中取到文件的磁盘存储路径,然后取到该File文件,设置请求头内容将通过response.getOutputputStream方法将该二进制文件输出到浏览器上,通过浏览器下载。前端代码相对简单省略,可以参考elementplus组件upload实现前端设计。
@RequestMapping("test2/fileload") public String fileload(@RequestParam("filename")String filename, HttpServletResponse response) throws IOException { QueryWrapper<Myfile> queryWrapper=new QueryWrapper<>(); queryWrapper.eq("name",filename); Myfile myfile = myfileMapper.selectOne(queryWrapper); File file=new File(myfile.getPath()); response.setHeader("Content-Disposition", "attachment; filename=" + filename); response.setContentType("application/octet-stream"); ServletOutputStream outputStream = response.getOutputStream(); outputStream.write(FileUtil.readBytes(file)); outputStream.close(); return "success"; }