[英]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.