簡體   English   中英

AWS Boto3 上傳文件失敗 Object

[英]AWS Boto3 Failure to Upload File Object

我正面臨一個問題,我正在嘗試測試我的身份驗證以將文件上傳到 S3 存儲桶中。 目前我遇到了拒絕訪問的問題,但我想確保我的配置按預期工作。 我理解這段代碼的工作方式是我使用的是配置文件配置“PROFILE_CONFIG_1”。 這意味着我正在使用此配置捕獲 access_keys 和密鑰。

然后,我只是將我的本地文件放入 S3 容器中。 我懷疑我是否能夠使用 S3 瀏覽器按預期將文件實際放置在路徑中,但代碼告訴我的方式不同。

def upload_to_aws():
    session = boto3.Session(profile_name='PROFILE_CONFIG_1')
    dev_s3_client = session.client('s3')    

    local_file = 'test.txt'

    bucket = 'myBucketName'

    filename = 'path/to/dir/'

    with open(local_file, 'rb') as f:
        dev_s3_client.upload_fileobj(f, bucket, filename) # Fails with error (AccessDenied) when calling the PutObject operation

更新:我嘗試使用 AWS CLI 添加一個文件,一切都按預期工作。 直到現在我才在 python 代碼中看到拒絕訪問問題。 我也通過代碼簡化為這樣的東西,但仍然看到錯誤消息。

session = boto3.Session(profile_name='PROFILE_CONFIG_1')
s3_client = session.client('s3')
s3_client.upload_file('Path_To_File\\test.txt', 'myBucketName','test.txt')

約翰的更新 2:

s3 = boto3.client('s3')
with open("test_file.txt", "rb") as f:
    s3.upload_fileobj(f, 'take-uat-ics', 'destination_path/test_file.txt')

您的目標 S3 object 密鑰在您發布的代碼中有兩個相關問題。

第一種是使用path/to/dir/作為目標 S3 object 鍵。 S3 副本不像常規的 Windows/Mac/Linux 文件副本那樣工作,您可以使用與cp file.txt /usr/mary/等效的文件將文件復制到文件夾中,從而生成/usr/mary/file.txt 這不適用於 S3 API。 目標必須是 S3 對象的完整密鑰。

第二個問題是在/destination_path/test_file.txt中使用前導斜杠。 S3 密鑰不需要或不允許將前導正斜杠作為 S3 存儲桶根的指示符。

有效的 S3 object 鍵既不以正斜杠開頭也不以斜杠結尾。 有效的 S3 object 密鑰示例如下:

dogs/small/poodle.png
destination_path/test_file.txt

暫無
暫無

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

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