簡體   English   中英

S3 從存儲桶下載多個文件

[英]S3 multiple files download from a bucket

我有一個路徑格式為 {productId}/{store}/description.txt 的 S3 存儲桶。 這是存儲桶在頂層的外觀

ABC123/Store1/description.txt
ABC123/Store2/description.txt
ABC123/Store3/description.txt
DEF123/Store1/description.txt
DEF123/Store2/description.txt

如果我必須閱讀與某個產品 ID(例如:ABC123)相關的所有文件,我是否必須導航到 ABC123,列出所有文件夾並為每個商店迭代它並分別下載每個文件? 或者有沒有辦法通過單個 API 調用來做到這一點?

PS:我需要以編程方式執行此操作

使用boto3您可以使用過濾,並且必須迭代

有幾種方法可以做到這一點,但我通常並行下載 s3 對象。 例如:

import boto3

from multiprocessing import Pool


session = boto3.Session()

s3r = session.resource('s3')

my_bucket = s3r.Bucket('your_bucket')

objects_to_download = []
for obj in my_bucket.objects.filter(Prefix='ABC123/'):    
        objects_to_download.append((my_bucket.name, obj.key))
    
#print(objects_to_download)

def s3_downloader(s3_object_tuple):
    my_bucket, my_object = s3_object_tuple
    s3_object = s3r.Object(my_bucket, my_object)
    out_file = my_object.replace('/', '_')
    print(f'Downloading s3://{my_bucket}/{my_object} to {out_file}')
    s3_object.download_file('/tmp/' + out_file)
    print(f'Downloading finished s3://{my_bucket}/{my_object}')
    
with Pool(5) as p:
    p.map(s3_downloader, objects_to_download)

我相信這是 AWS 控制台 Web 界面的限制,我自己嘗試過(但失敗了)。

或者,也許使用第 3 方 S3 瀏覽器客戶端,例如http://s3browser.com/

如果您安裝了帶有 AWS Explorer 擴展的 Visual Studio,您還可以瀏覽到 Amazon S3(第 1 步),選擇您的存儲桶(第 2 步),選擇您要下載的所有文件(第 3 步),然后右鍵單擊下載它們全部(第 4 步)。

在此處輸入圖片說明

S3 服務對同時下載沒有有意義的限制(一次可以輕松下載數百次),並且沒有與此相關的策略設置……但 S3 控制台只允許您一次選擇一個文件進行下載。

下載開始后,您可以開始一個又一個,與您的瀏覽器允許您同時嘗試的數量一樣多。

如果有人仍在尋找 S3 瀏覽器和下載器,我剛剛嘗試了 Filezilla Pro(它是付費版本)。 它工作得很好。

我使用通過 IAM 設置的訪問密鑰和秘密密鑰創建了到 S3 的連接。 連接是即時的,下載所有文件夾和文件的速度很快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM