• SSM 实现文件下载功能(用postman测试)


    1. 前端只用传文件的路径即可。 如:String path = “D:user est.docx”;
    2. controller
      @Autowired
      FileService fileService;
      /**
      * 前端传文件路径来下载文件
      *
      * @param path 文件路径,如 /guide/appendix.doc
      * @param response
      * @return
      */
      @RequestMapping(value = "/download")
      @ResponseBody
      public CommonReturnType downloadAppendix(@Param("path") String path, HttpServletRequest request, HttpServletResponse response) {
      fileService.downloadFile(path,request,response);
      return CommonReturnType.create(null, "下载完成");
      }
    3. service
      @Override
      public void downloadFile(String path, HttpServletRequest request, HttpServletResponse response) {
      try {
      //String pathTest = "D:\UPC\offer"+"\"+fileName;
      //转码,免得文件名中文乱码(有时候加上反而会乱码)
      // fileName = URLEncoder.encode(fileName,"UTF-8");

      //从路径中获取文件名称,trim:去除字符串前后的空格
      File tempFile = new File(path.trim());
      String filename = tempFile.getName();

      //解决中文文件名乱码
      String userAgent = request.getHeader("User-Agent");
      //IE内核浏览器
      if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
      filename = java.net.URLEncoder.encode(filename, "UTF-8");
      } else {
      // 非IE浏览器的处理:
      filename = new String(filename.getBytes("UTF-8"), "ISO-8859-1");
      }
      //设置文件下载头
      response.setHeader("Content-disposition",String.format("attachment; filename="%s"", filename));
      //设置文件ContentType类型,这样设置,会自动判断下载文件类型
      response.setContentType("multipart/form-data");
      response.setCharacterEncoding("UTF-8");

      InputStream inputStream = new BufferedInputStream(new FileInputStream(new File(path)));
      BufferedOutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
      //创建缓冲区
      byte[] buffer = new byte[1024];
      int length;
      while ((length = inputStream.read(buffer)) != -1) {
      outputStream.write(buffer, 0, length);
      outputStream.flush();
      }
      //关闭流
      inputStream.close();
      outputStream.close();
      } catch (IOException e) {
      e.printStackTrace();
      }
      }
    4. postman测试

       本人完整调试,简单标准实现文件下载

  • 相关阅读:
    最大连续子数组问题之一维数组
    敏捷开发读后感
    第一次作业总结
    OS X(10.10) python3.4 matplotlib的安装
    XCODE 6.1.1 配置GLFW
    python装饰器(decorator)
    Android实现Service永久驻留
    软件项目管理第2次作业:豆瓣测评
    软件项目管理第1次作业:四则运算生成器
    软件项目管理第0次作业:如果一定要改变世界的话,为什么不用最酷的方式呢
  • 原文地址:https://www.cnblogs.com/gslgb/p/12924618.html
Copyright © 2020-2023  润新知