【发布时间】:2019-03-05 21:38:03
【问题描述】:
我有大约 1GB 的数据,我的客户想从我的门户网站以 zip 文件的形式下载这些数据,但在后端,这些文件是从 AWS S3 提供的。
目前我正在将所有文件下载到内存流并压缩它,这需要花费大量时间,有时它会超时并且客户端不确定请求是否正在处理,因为我在浏览器中没有下载进度。
那么有没有最好的解决方案来下载从 S3 压缩的海量数据
谢谢
【问题讨论】:
标签: c# asp.net-mvc amazon-s3
我有大约 1GB 的数据,我的客户想从我的门户网站以 zip 文件的形式下载这些数据,但在后端,这些文件是从 AWS S3 提供的。
目前我正在将所有文件下载到内存流并压缩它,这需要花费大量时间,有时它会超时并且客户端不确定请求是否正在处理,因为我在浏览器中没有下载进度。
那么有没有最好的解决方案来下载从 S3 压缩的海量数据
谢谢
【问题讨论】:
标签: c# asp.net-mvc amazon-s3
您可以在 Amazon EC2 实例上运行一些代码,从 Amazon S3 下载数据(如果在同一区域,速度非常快),压缩它,然后将压缩文件放回 S3。
然后用户可以直接从 S3 下载它。
如果你想看中,他们可以通过预签名 URL 下载,你可以有一个生命周期规则,在一两天后删除它。
【讨论】:
好的,所以我自己对 S3 的经验很少,但在这种情况下,一般情况下需要异步处理。如 - 当您的用户单击“下载”时,您会启动一个后台进程,该进程将文件下载并压缩到某个临时位置。在此期间,您的客户端会看到类似“正在准备下载,请稍候”的信息。最好有一个进度条,这样他就可以看到进程没有停止。完成后,下载会真正开始,并且不会出现任何超时,因为您已经在临时位置拥有完整的 ZIP 文件。
或者,看看您是否可以简化整个流程。现在听起来您正在将所有文件下载到内存中,在内存中创建 ZIP 文件,并且直到您才开始将第一个字节输出到客户端。你可以做得更好。那里有允许“即时”压缩的库。当您仍在一端从 S3 下载文件时,另一端已经将 ZIP 文件吐出到客户端。这样您也不需要将所有内容都保存在内存中。
【讨论】: