从控制器下载多个文件

问题描述 投票:0回答:1

我有这个控制器,可以让我下载文件:

  File toDownload = new File("/tmp/" + fileName)
  response.setContentType("application/octet-stream")
  response.setHeader("Content-disposition", "filename=" + fileName)
  response.outputStream << toDownload.bytes

现在我需要下载两个文件,但我不知道该怎么做,我想避免通过单独的 javascript 调用来请求它。

spring-boot groovy grails
1个回答
0
投票

每个 1 个 HTTP 请求只能有 1 个文件才能在浏览器中一致工作。如果您想在单个请求中发送 2 个文件,最好的选择是压缩这 2 个文件并在有效负载中发送 zip 文件。像这样:

response.setContentType("application/zip")
response.setHeader("Content-Disposition", 'attachment;filename=\"someFileName.zip\"')
new ZipOutputStream( response.outputStream ).with { zos ->
   zos.putNextEntry( new ZipEntry( file1.name ) )
   zos << file1
   zos.closeEntry()
   zos.putNextEntry( new ZipEntry( file2.name ) )
   zos << file2
   zos.closeEntry()
   zos.finish()
}

但这需要有技术能力的人了解如何解压缩文件以检索原始的 2 个文件。

另一种选择是返回一个静态 HTML 页面,其中包含多个链接,他们可以使用这些链接单独请求文件:

<html ...>
   <head>
   </head>
   <body>
      <ul>
        <li><a href="/url/to/file1">${file1.name}</a></li>
        <li><a href="/url/to/file2">${file2.name}</a></li>
      </ul>
   </body>
</html>

用户然后单击两个链接来单独检索文件。

最后一个选项是使用 javascript 为用户自动请求每个文件,但您曾说过您想避免这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.