簡體   English   中英

AWS BOTO3 S3 python - 調用 HeadObject 操作時發生錯誤 (404):未找到

[英]AWS BOTO3 S3 python - An error occurred (404) when calling the HeadObject operation: Not Found

我正在嘗試在 s3 存儲桶中下載一個目錄。 我正在嘗試使用 transfer 從 S3 存儲桶下載目錄,但我收到錯誤消息“調用 HeadObject 操作時發生錯誤 (404):未找到”。 請幫忙。

S3 structure:
  **Bucket
     Folder1
        File1**

注意:嘗試下載 Folder1

transfer.download_file(self.bucket_name, self.dir_name, self.file_dir + self.dir_name)

我最近遇到了同樣的問題。 您可能拼錯了路徑和文件夾名稱。 例如,在我的情況下,我搞砸了'/'。

要修復它,請確保您用作函數參數的變量包含S3中的目錄,文件夾和文件的正確名稱。 另外,請確保將'/'放在正確的變量中的正確位置。 例如,就我而言,我發現:

  • 存儲桶名稱: bucket_name (最后沒有'/',沒有's3://')
  • 目錄名: folder1 / folder2 / file_name (開頭沒有'/')

我希望它可以幫助您和其他人輕松解決此錯誤。

我遇到的另一個可能原因是您嘗試下載的文件包含0個字節。 這非常令人困惑,因為AWS cli會毫不猶豫地下載它

另一個可能是您在創建S3資源時輸入了不正確的endpoint_url參數。

對於將來的用戶,請創建如下資源:

s3 = boto3.resource(
  's3',
  region_name=[your region, e.g. eu-central-1],
  aws_access_key_id=[your access key],
  aws_secret_access_key=[your secret key]
)

在上面,我可能會傳遞一個endpoint_url ,正如我錯誤地做的那樣(我后來發現我不小心將端點URL傳遞給了另一個AWS服務)。

如果您使用AWS CLI進行身份驗證,則可以省略region_nameaws_access_keyaws_secret_access_key參數,如下所示:

s3 = boto3.resource('s3')

花了很多時間找出為什么我在 DigitalOcean 平台上收到此錯誤消息。

應按以下方式執行請求:

client = boto3.client('s3', endpoint_url='https://fra1.digitaloceanspaces.com')
client.download_file('mybucketname', 'remotefilekeytoread', 'localfilenametosave')

如果 endpoint_url 設置為“https://mybucketname.fra1.digitaloceanspaces.com”,下載將失敗並顯示 404 錯誤,即使請求簽名 URL 之類的其他內容也適用於此端點 URL。 希望這可以幫助任何人。

暫無
暫無

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

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