如何在 Amazon s3 存储桶中压缩文件并获取其 URL
2022-09-01 23:10:28
我在Amazon s3存储桶中有一堆文件,我想压缩这些文件并使用Java Spring通过S3 URL下载获取内容。
我在Amazon s3存储桶中有一堆文件,我想压缩这些文件并使用Java Spring通过S3 URL下载获取内容。
S3 不是文件服务器,也不提供操作系统文件服务,例如数据操作。
如果有很多“巨大”文件,你最好的选择是
是的,您可以使用 AWS lambda 执行相同的操作,但 lambda 有 900 秒(15 分钟)执行超时的限制(因此建议分配更多 RAM 以提高 lambda 执行性能)
从S3到本地区域EC2实例等服务的流量是免费的。
如果您的主要目的只是使用 EC2/etc 服务在同一 AWS 区域内读取这些文件,则不需要此额外步骤。只需直接访问文件即可。
(更新):正如@Robert Reiz 所提到的,现在您还可以使用 AWS Fargate 来完成这项工作。
注意:
建议使用 AWS API 访问和共享文件。如果您打算公开共享文件,则必须认真研究安全问题并施加下载限制。AWS流向互联网的流量从来都不便宜。
将它们压缩到您的末端,而不是在AWS中执行此操作,最好是在前端,直接在用户浏览器上。您可以在javascript中流式传输多个文件的下载,使用该流创建一个zip并将此zip保存在用户磁盘上。
将拉链移动到前端的优点:
StreamSaver对于此目的很有用,但是在他们的压缩示例(将多个文件另存为zip)中受到少于4GB文件的限制,因为它没有实现zip64。您可以将StreamSaver与支持zip64的客户端zip组合在一起,如下所示(我还没有测试过):
import { downloadZip } from 'client-zip';
import streamSaver from 'streamsaver';
const files = [
{
'name': 'file1.txt',
'input': await fetch('test.com/file1')
},
{
'name': 'file2.txt',
'input': await fetch('test.com/file2')
},
]
downloadZip(files).body.pipeTo(streamSaver.createWriteStream('final_name.zip'));
如果您选择此选项,请记住,如果您在存储桶中启用了 CORS,则需要在存储桶的 CORS 配置字段中添加完成压缩的前端 URL。AllowedOrigins