【问题标题】:Spring MVC file download IOUtils.copy works but not FileCopyUtilsSpring MVC 文件下载 IOUtils.copy 有效,但 FileCopyUtils 无效
【发布时间】:2015-12-15 10:24:22
【问题描述】:

我遇到了范围问题。我正在尝试拥有一个允许用于下载 zip 文件的 Spring 控制器。这是有效的 sn-p,当用户向 url 发出 get 请求时,浏览器开始文件下载

@RequestMapping(value = "mypath/",method = RequestMethod.GET)
  public void downloadFiles(@PathVariable("id") String id) {

    InputStream a = new ByteArrayInputStream(fileService.get(id));
    StringBuilder sb = new StringBuilder("attachment; filename=).append(id).append(".zip");
    response.setHeader(HttpHeaders.CONTENT_DISPOSITION, sb.toString());
    org.apache.commons.io.IOUtils.copy(a, response.getOutputStream());
    response.setContentType("application/x-download");
    response.flushBuffer();
   }

但是...如果我将 IOUtils.copy 替换为 FileCopyUtils.copy,当我点击 url 时,浏览器只会显示文件的内容而不是下载它

可以解释一下发生了什么吗?

【问题讨论】:

    标签: java spring download copy zip


    【解决方案1】:

    老问题,但可能对未来或当前的搜索者有所帮助。

    我目前正在研究这个,我已经使用 Spring MVC4 和 MongoDB 来下载文件,它们都运行良好。

    response.setContentType("application/force-download");
    response.setHeader("Content-Disposition", "attachment; filename=\""+ mDBGridFSFile.getFilename() +"\"");
    

    这里的 mDBGridFSFile 是 MongoDB GridFS File,用于包含文件内容。

    这是我用来强制下载而不是将缓冲区转储到浏览器并强制将其写入磁盘的 contentType。

    //FileCopyUtils.copy(mDBGridFSFile.getInputStream(), response.getOutputStream());
    
    IOUtils.copyLarge(mDBGridFSFile.getInputStream(), response.getOutputStream());
    

    我已经在我的项目中测试过它可以工作,你的标题可能有问题。

    【讨论】:

      猜你喜欢
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 2020-05-17
      相关资源
      最近更新 更多