【问题标题】:Multiple zip file download on single Spring Boot rest controller在单个 Spring Boot 休息控制器上下载多个 zip 文件
【发布时间】:2021-08-16 12:40:46
【问题描述】:

我有一个要求:

    I have multiple files on the server location
    My Response size limit is 100 MB, Max

所以我的用例是合并文件并以 zip 格式生成并将附件发送到客户端浏览器。但是,这里客户端浏览器只有一个按钮“全部下载”。基于单击该按钮,位于服务器上的所有文件都应作为多个 zip 文件下载到客户端。 例如,我有 7 个文件

 1.txt - 24 MB
 2.txt - 30 MB
 3.txt - 30 MB
 4.txt - 30 MB
 5.txt - 40 MB

所以,通过单击按钮,应该下载两个 zip 文件,因为 1.zip 包含 1.txt、2.txt、3.txt,因为它。大约有 100 MB,另一个 2.zip 将包含 4.txt 和 5.txt。

我在网络上遇到过很多事情,例如压缩文件并将其作为响应发送,但只有在响应传输后通道关闭时才会发送响应。

http://techblog.games24x7.com/2017/07/18/streaming-large-data-as-zipped-file-from-rest-services/

https://javadigest.wordpress.com/2012/02/13/downloading-multiple-files-using-multipart-response/

此外,UI 可以对端点有多个请求,但我有多个用户,所以我可能需要跟踪用户和文件。任何想法或实施将不胜感激。

提前致谢。

【问题讨论】:

  • 我认为多部分响应不会起作用,因为它被视为一次下载。您可以通过创建一个端点来伪造它,该端点将返回一个用于多次下载的 url 列表,然后在客户端站点上一个一个动态地下载它们

标签: java spring spring-boot rest session


【解决方案1】:

“此外,UI 可以向端点发出多个请求,但我有多个用户,因此我可能需要跟踪用户和文件。任何想法或实现将不胜感激。”

这可以通过使用 spring-actuators 和 log4J 来解决。使用弹簧执行器,您可以监控请求的来源。

可以使用依赖来完成

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

在 application.properties 文件中:-

management.endpoints.web.exposure.include=*

默认情况下只公开 2 个端点。

关于多文件下载...有具体限制吗?像 zip 文件的大小必须为 100mb?

如果是,那么您需要通过一一调用多个端点并下载相同的方式来编排您的解决方案。

【讨论】:

    【解决方案2】:

    也许我对此有一个解决方法,如果您查看视频流概念,它与您的用例相同,因为为用户提供了巨大的文件大小。所以;我想建议这是一个可能的解决方案。

    流的概念是根据客户端的请求加载所需文件的特定块,直到流结束。因此,假设文件大小为100MB,那么客户端可以在请求标头中指定绕过Range HTTP 标头的块,并且您的后端应该理解此标头并使用所需的数据进行响应,直到文件结束。

    看看下面的链接,也许会给你更多的细节:

    【讨论】:

      猜你喜欢
      • 2019-02-01
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      • 2019-03-27
      • 2021-05-19
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      相关资源
      最近更新 更多