提问者:小点点

使用AWS lambda将视频上载到S3中,并提供下载URL


我想上传视频到S3使用AWS lambda功能。此视频在我的本地计算机中不可用。我有“下载URL”。我不想下载到我的本地电脑上传到S3。我正在寻找一个使用lambda函数直接将这个视频文件放入S3的解决方案。如果我使用缓冲区或流,我将消耗大量的内存。对此有更好的高效解决方案吗?

我真的很感谢你的帮助。


共2个答案

匿名用户

您当然可以编写一个AWS Lambda函数,该函数将:

  • 从URL下载文件并将其存储在/tmp
  • 使用AWS S3 SDK上载到AmazonS3

下载完整的文件将是最容易的,而不是试图以“位”流它。但是,请注意,可用于存储数据的磁盘空间有500MB的限制。如果您的下载大于500MB,您将需要做一些创造性的编程来下载其中的一部分,然后作为多部分上传。

至于如何下载它,可以使用任何您喜欢的库来下载web文件。

匿名用户

我也有同样的问题,并开发了以下快速解决方案,它不依赖于/tmp磁盘限制。它使用下载流作为一个类似文件的对象。

特点:

>

  • 没有外部python模块,使用AWS Lambda python 3.6内置boto3和URLLIB3
  • 内置分块阅读,适合下载大文件
  • 通过urllib3池管理实现高效连接和内存使用
  • 使用可配置的upload_fileobj内建多部分和线程上载

    import boto3
    import botocore.vendored.requests.packages.urllib3 as urllib3
    
    def lambda_handler(event, context):
    
        url='http://yourdownloadurl/file.tgz' # put your url here
        bucket = 'aws-s3-bucket' #your s3 bucket
        key = 'folder/filename' #your desired s3 path or filename
    
        s3=boto3.client('s3')
        http=urllib3.PoolManager()
        s3.upload_fileobj(http.request('GET', url,preload_content=False), bucket, key)