簡體   English   中英

使用 Python3 從 AWS S3 存儲桶上傳和下載特定版本的文件

[英]Upload and download file wrt specific version from AWS S3 bucket using Python3

我需要從 AWS S3 存儲桶上傳和下載文檔並且該文檔將定期更新(每天/每周/每月)並包含跟蹤它的版本。

想寫程序上傳下載帶版本的文件。 不知道我們如何使用 Python 和 Boto3 來實現。

想法 1) 在 S3 存儲桶中創建版本作為文件夾的文件夾結構並將文件存儲在其中,當用戶需要任何版本特定文件時,將 go 到該版本文件夾並獲取它。 但是如果用戶在沒有指定的情況下要求最新版本呢? 我不想每次都在 UI 或后端中硬編碼最新版本。

Ex- S3_Bucket/Document1/version_name/file_name.txt

想法 2) 在 RDS 中創建表來存儲版本、s3 路徑位置、上傳日期和 is_latest(boll) 列。 然后用戶要求任何版本或最新文件,我將首先查詢數據庫,然后從 S3 檢索文件並共享。

EX - RDS 表

版本 上傳日期 is_latest S3 文件路徑
2.3.4 當前日期(默認) 時間/時間 S3_Bucket/Doc1/version_name/file_name.txt

這些只是我的想法,請建議我實現這一目標的正確或最佳 pythonic 方法。 只想使用 Python + Boto3 package。

我想為您的要求提供一些替代方案。 AWS S3 能夠執行版本控制[1] 版本控制意味着您可以提供相同的文件名,S3 將在其端處理版本控制。 這是通過為文件的每個版本賦予唯一的 ID 值來實現的。 您可以使用 boto3 將數據上傳到 S3,如他們的文檔[2]中所述。 然后,您還可以使用 boto3 [3]通過引用文件的版本 ID 下載文件的特定版本。

可以在 Boto3 中識別 S3 對象的版本 ID,如下所示:

import boto3

s3 = boto3.resource('s3')
object = s3.Object('bucket_name', 'key')

print(object.version_id)

默認情況下,如果您不指定版本 ID,您將收到最新的文件。

參考:

[1] https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-versioning-examples.html#awsui-tabs-0-4061-python

[2] https://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-uploading-files.html

[3] https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#downloading-a-specific-version-of-an-s3-object

暫無
暫無

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

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