我希望能够使用AWS lambda函数将视频上传到S3。这个视频不在我的本地电脑上,我只有一个'下载URL'。我不想先下载到本地电脑,再上传到S3。我正在寻找一种直接使用lambda函数将此视频文件放入S3的解决方案。如果使用缓冲或流式传输,会消耗大量内存。有没有更好更高效的解决方案呢?非常感谢您的帮助。
我有同样的问题,并开发了以下快速解决方案,它不依赖于 /tmp
磁盘限制。它使用下载流作为文件对象。
特点:
使用可配置的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)
/tmp
中