当前位置: 首页 > 知识库问答 >
问题:

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

微生自怡
2023-03-14

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

我真的很感谢你的帮助。

共有2个答案

慎俊艾
2023-03-14

我也有同样的问题,并开发了以下快速解决方案,它不依赖于/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)
    

  • 申辉
    2023-03-14

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

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

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

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

     类似资料:
    • 想下载S3签名视频文件…但不是下载它将要播放。。。 使用send_dataS3下载 视频文件=”https://s3-eu-west-1.amazonaws.com/tokboxhub.mangoapps.com/46250362/2e1ad9d5-8240-41d2-82bc-38c34bf92e7e/archive.mp4?X-Amz算法=AWS4-HMAC-SHA256

    • 我试图使用API接口将视频上传到S3存储桶,我遵循了预签名的URL过程,下面是我的lambda函数,它返回预签名的URL(它正确地返回了预签名的URL,看起来): 当我尝试上传一个像这样卷曲的mp4视频时,例如: curl-X PUT-F'data=@ch01_00000100055009702.mp4'https://redacted-bucket-instance.s3.amazonaws.c

    • 问题内容: 感谢downloadTaskWithURL,我正在下载视频,并使用以下代码将其保存到我的画廊: 它在我的模拟器上可以正常工作,但是在我的iPad上,即使出现视频也不会保存视频。你知道为什么吗? 我的控制台中也出现了该消息 无法从文件创建数据(空) 问题答案: 请通过代码检查注释: Xcode 8•Swift 3

    • 我在尝试将文件上传到我的S3存储桶时遇到了问题。一切正常,除了我的文件参数似乎不合适。我正在使用Amazon S3 sdk从nodejs上传到s3。 以下是我的路线设置: 这是个项目。upload()函数: 将“Body”参数设置为类似“hello”的字符串可以正常工作。根据doc,Body必须获取(Buffer、类型化数组、Blob、String、ReadableStream)对象数据。但是,上

    • 我正在编写一个应用程序,它从url下载图像,然后使用AWS-SDK将其上传到S3桶中。 以前,我只是下载图像并将它们保存到磁盘上,就像这样。 然后像这样将图像上传到AWS S3 但我想跳过将映像保存到磁盘的部分。有什么方法可以响应从到一个变量,然后上传它吗?

    • 我正在创建一个iOS应用程序,我希望用户能够实时流式传输视频,但是,在实时流启动后加入实时流的用户,从头开始观看流而不是实时(我还将添加功能,允许用户观看,然后能够观看直播)。 我已经研究了许多第三方流媒体选项,如Agora、Twilio、Vimeo等,但我不认为它们满足我的需求,因为我需要加入直播流的用户从一开始就开始观看,而不是直播。 我已经探索了将小视频块连续上传到像Firebase存储这样