我有这个控制器,可以让我下载文件:
File toDownload = new File("/tmp/" + fileName)
response.setContentType("application/octet-stream")
response.setHeader("Content-disposition", "filename=" + fileName)
response.outputStream << toDownload.bytes
现在我需要下载两个文件,但我不知道该怎么做,我想避免通过单独的 javascript 调用来请求它。
每个 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 为用户自动请求每个文件,但您曾说过您想避免这种情况。