首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在亚马逊s3存储桶中压缩文件并获取其网址

如何在亚马逊s3存储桶中压缩文件并获取其网址
EN

Stack Overflow用户
提问于 2017-04-07 18:17:45
回答 3查看 50K关注 0票数 17

我有一堆文件在亚马逊s3桶中,我想压缩这些文件和下载获得的内容通过S3网址使用Java Spring。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-07 23:11:54

S3不是文件服务器,也不提供操作系统文件服务,例如数据操作。

如果有很多“巨型”文件,你最好的选择是

  1. 启动一个简单的存储桶将所有这些文件instance
  2. Download到EC2实例,压缩它们,并使用新对象名

将其重新上传回S3存储桶

是的,您可以使用AWS lambda来做同样的事情,但是lambda被限制在900秒(15分钟)执行超时(因此,建议分配更多的RAM来提升lambda的执行性能)

S3到本地EC2实例和etc服务的流量是免费的。

如果您的主要目的只是使用EC2/etc服务读取同一AWS区域内的这些文件,那么您不需要这个额外的步骤。直接访问文件即可。

(更新):正如@Robert Reiz所提到的,现在您也可以使用AWS Fargate来完成此工作。

注意:

建议使用AWS API访问和共享文件。如果您打算公开共享该文件,则必须认真考虑安全问题并施加下载限制。亚马逊网络服务到互联网的流量从来都不便宜。

票数 26
EN

Stack Overflow用户

发布于 2018-09-11 07:06:04

如果您需要S3压缩格式的单个文件(对象),那么可以通过一种间接的方式来实现。您可以定义一个指向S3存储桶的CloudFront端点,然后让CloudFront在输出时压缩内容:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html

票数 -1
EN

Stack Overflow用户

发布于 2020-09-18 12:23:47

嗨,我最近不得不为我的应用程序做这件事--通过一个用户可以下载的url链接提供一个zip格式的文件包。

简而言之,首先使用BytesIO方法创建一个对象,然后使用ZipFile方法通过迭代所有s3对象来写入此对象,然后对此zip对象使用put方法并为其创建一个预先设计的url。

我使用的代码如下所示:

首先,调用此函数来获取zip对象,ObjectKeys是需要放入zip文件中的s3对象。

代码语言:javascript
复制
def zipResults(bucketName, ObjectKeys):
    buffer = BytesIO()
    with zipfile.ZipFile(buffer, 'w', compression=zipfile.ZIP_DEFLATED) as zip_file:
        for ObjectKey in ObjectKeys:
            objectContent = S3Helper().readFromS3(bucketName, ObjectKey)
            fileName = os.path.basename(ObjectKey)
            zip_file.writestr(fileName, objectContent)

    buffer.seek(0)
    return buffer

然后调用此函数,key是您为zip对象提供的键:

代码语言:javascript
复制
def uploadObject(bucketName, body, key):
    s3client = AwsHelper().getClient("s3")
    try:
        response = s3client.put_object(
            Bucket=bucketName,
            Body=body,
            Key=key
        )
    except ClientError as e:
        logging.error(e)
        return None

    return response

当然,你需要io、zipfile和boto3模块。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43275575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档