【问题标题】:Dynamically resizing images using AWS S3/Lambda使用 AWS S3/Lambda 动态调整图像大小
【发布时间】:2020-09-02 09:29:59
【问题描述】:

所以我有一个网络应用程序,将图像存储在单个存储桶中,遵循这个原则(具有用户 ID 名称的文件夹,具有用户 ID 名称的图片 + 尊重的用户 ID 文件夹中的一些随机字符)。

现在我已经实现了一个 python 脚本,它从单个存储桶(根文件夹或我指定的任何文件夹)获取上传的图像并将其输出到我指定的另一个存储桶/文件夹。我只是想知道是否可以根据我的情况实时执行此操作(我什至不需要将调整大小的图片导出到另一个存储桶,它们可以保留在原始上传到的同一文件夹中)。这是我现在正在使用的脚本的一部分。任何帮助表示赞赏。

s3_client = boto3.client('s3')
     
def resize_image(image_path, resized_path):
    with Image.open(image_path) as image:
        image.thumbnail((128, 128))
        image.save(resized_path)
     
def handler(event, context):
    for record in event['Records']:
        bucket = record['s3']['bucket']['name']
        key = record['s3']['object']['key'] 
        download_path = '/{}{}'.format(uuid.uuid4(), key)
        upload_path = '/resized-{}'.format(key)
        
        s3_client.download_file(bucket, key, download_path)
        resize_image(download_path, upload_path)
        s3_client.upload_file(upload_path, '{}-resized'.format(bucket), key)

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-lambda


    【解决方案1】:

    啊!看起来您从 Lambda 文档中获取了示例代码:Tutorial: Using AWS Lambda with Amazon S3 - AWS Lambda

    您可以配置 Amazon S3 事件,以便在将新对象添加到 S3 存储桶时触发 AWS Lambda 函数。事实上,这就是教程的操作方式。这实际上是“实时的”,因为它会在上传对象后立即触发。 (只需配置前缀,以免触发无限循环。)

    自己调整图像大小的另一种方法是使用可以即时调整大小的服务,例如:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-13
      • 2018-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-13
      • 2017-07-09
      相关资源
      最近更新 更多