• [springMVC学习]10、文件上传和下载


    目录

    简介

    文件上传

    文件下载

    总结


    简介

            在javaWeb中,处理文件上传下载还是挺麻烦的,但是在springmvc中就简单很多了,下面来进行介绍。


    文件上传

            springmvc实现了MultiPartResolver接口,所以可以对上传的文件进行解析,实现这个接口的是CommonsMultiPartResolver

            在springmvc中,默认是没有启用这个文件上传类的,我们需要将其配置进去

        <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
    

            下面,我们在web目录下面建一个文件夹,里面随便放一个文件,不然out目录可能并不会生成该目录

             然后就是创建对应的handler

    1. @RequestMapping("/upload")
    2. public String upload(@RequestParam("file") MultipartFile uploadFile, HttpServletRequest request) throws IOException {
    3. //获取文件名称
    4. String filename = uploadFile.getOriginalFilename();
    5. //得到保存的路径
    6. String savePath = request.getServletContext().getRealPath("/file/" + filename);
    7. System.out.println(savePath);
    8. //创建文件
    9. File file = new File(savePath);
    10. if (!file.exists() && !file.createNewFile())return "fail";
    11. //转存文件
    12. uploadFile.transferTo(file);
    13. return "success";
    14. }

            解释一下,我们提交的文件使用MultipartFile来进行接受,然后进行转存就行。

            来测试一下,使用postman进行测试

             注意:需要将提交格式设置为mutilpart/form-data。如果是前端使用form表单进行提交,通过设置enctype就行

            提交后后端成功接收到图片


    文件下载

            文件下载就是通过返回一个ReponseEntity来完成的,注意:需要给该方法标识为@ResponseBody,因为我在类上使用了@RestController,所以就不用标识了。

    1. @RequestMapping("/download")
    2. public ResponseEntity<byte[]> download(){
    3. return null;
    4. }

             ResponseEntity里面的类型我们填写的是byte[],就是表示返回的文件是二进制的。接下来我们就需要构建一个ResponseBody进行返回,下面为该类的构造器

            很明显,body就是我们要返回的二进制文件,header和status就是响应头和响应体,下面就是最终的代码

    1. @RequestMapping("/download")
    2. public ResponseEntity<byte[]> download(HttpServletRequest request) throws IOException {
    3. //返回的文件名称
    4. String fileName = "3.jpg";
    5. //文件绝对路径
    6. String realPath = request.getServletContext().getRealPath("/file/" + fileName);
    7. //输入流
    8. InputStream inputStream = new FileInputStream(realPath);
    9. //根据文件大小构建byte[]数组
    10. byte[] bytes = new byte[inputStream.available()];
    11. //读数据
    12. inputStream.read(bytes);
    13. //创建Headers
    14. HttpHeaders headers = new HttpHeaders();
    15. //告诉游览器返回的是文件
    16. headers.add("Content-Disposition", "attachment;filename=" + fileName);
    17. //创建Status,HttpStatus.OK就是表示200
    18. HttpStatus status = HttpStatus.OK;
    19. return new ResponseEntity<>(bytes, headers, status);
    20. }

             游览器进行访问

     

            成功实现功能。


    总结

            上面就是上传下载的方法,很简单,大家根据自己需要进行扩展即可 

  • 相关阅读:
    【数据聚类】基于matlab杂草算法优化K-means算法数据聚类【含Matlab源码 2168期】
    App性能测试工具Soloπ(四)---性能测试
    聊一聊AI+BI数智融合,如何驱动企业数智化转型发展?
    若依框架代码生成详解
    C++学习笔记1——链接器工具错误 LNK2005
    基于python-django协同过滤豆瓣电影推荐系统
    算法学习笔记(18): 平衡树(一)
    额温枪(红外线测温仪)方案产品用途和原理
    低代码技术助力智能制造企业数字化转型----工业软件讲坛第三次讲座
    数据结构与算法2-时间空间复杂度分析
  • 原文地址:https://blog.csdn.net/m0_51545690/article/details/126051638