groovy 从控制器下载多个文件

qgelzfjb  于 2023-11-16  发布在  其他
关注(0)|答案(1)|浏览(137)

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

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

字符串
现在我需要下载两个文件,我不知道如何做到这一点,我想避免请求它与一个单独的JavaScript调用。

pexxcrt2

pexxcrt21#

每一个HTTP请求只能有一个文件才能在浏览器中一致地工作。如果你想在一个请求中发送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为用户自动请求每个文件,但是你说过你想避免这样做。

相关问题