2017-05-29 302 views
0

我想使用AWS lambda函數將視頻上傳到S3。該視頻在我的本地計算機中不可用。我有'下載網址'。我不想將它下載到我的本地計算機並上傳到S3。我正在尋找一個解決方案,使用lambda函數將這個視頻文件直接放入S3中​​。如果我使用緩衝區或流媒體,我將消耗大量內存。有沒有更好的解決方案?使用AWS lambda將視頻上傳到S3,下載URL爲

我真的很感謝你的幫助。

+0

歡迎來到StackOverflow!你能否澄清你從哪裏複製文件? –

+0

嗨,約翰,在我的項目中,我需要上傳視頻在API後面。這些視頻在雲中可用,並且我有下載URL。我需要使用Amazon lambda將其直接發送到S3,而無需在本地下載。 – Dasu

+0

當你說「視頻在雲中可用」時,它們到底在哪裏可用?從S3,Google,Dropbox?或者只是從一些隨機的URL? –

回答

0

你當然可以寫一個AWS lambda函數會:

  • 從網址下載文件並使用/tmp
  • 上傳其存儲到亞馬遜S3 AWS的S3 SDK

下載完整文件最容易,而不是嘗試以「比特」的形式進行流式傳輸。但請注意,限制爲500MB的磁盤空間可用於存儲數據。如果您的下載量大於500MB,則需要進行一些創意編程才能下載部分文件,然後將其上傳爲多部分上傳文件。

至於如何下載它,請使用您喜歡的任何庫來下載網絡文件。

1

我有同樣的問題,並開發了以下不依賴於/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)