2017-06-14 156 views
1

我想從使用Python Boto的服務器下載特定的S3文件,並得到「403禁止」和「訪問被拒絕」錯誤消息。它說錯誤發生在第24行(get_contents命令)。我曾嘗試過,在源文件路徑開始處沒有「aws s3 cp」,兩次都收到相同的錯誤消息。我的代碼在下面,任何建議都會有幫助。Python S3亞馬遜代碼與'訪問被拒絕'錯誤

# Code to append csv: 
import csv 
import boto 
from boto.s3.key import Key 

keyId ="key" 
sKeyId="secretkey" 
srcFileName="aws s3 cp s3://...." 
destFileName="C:\\Users...." 
bucketName="bucket00001" 
conn = boto.connect_s3(keyId,sKeyId) 
bucket = conn.get_bucket(bucketName, validate = False) 

#Get the Key object of the given key, in the bucket 
k = Key(bucket, srcFileName) 
#Get the contents of the key into a file 
k.get_contents_to_filename(destFileName) 

回答

0

AWS對輸出的錯誤非常含糊。這是故意的,但它絕對無助於調試。您正在收到訪問被拒絕錯誤,因爲您使用的源文件名不是該文件的正確路徑。

aws s3 cp 

這是將一個或多個文件從源文件複製到目標文件(可以是s3存儲桶)的CLI命令。這不應該是源文件名的分開。

s3://... 

此前綴附加到表示該路徑是指S3對象的桶名,但是,使用時boto3這不是在源文件的路徑名必要的。

要使用boto3下載S3文件,執行以下操作:

此命令
import boto3 

BUCKET_NAME = 'my-bucket' # does not include s3:// 
KEY = 'image.jpg' # the file you want to download 

s3 = boto3.resource('s3') 
s3.Bucket(BUCKET_NAME).download_file(KEY, 'image.jpg') 

文檔可以在這裏找到: https://boto3.readthedocs.io/en/latest/guide/s3-example-download-file.html

一般來說,boto3(以及任何其他AWS SDK的)是隻需簡單包裝AWS api請求即可。您也可以像我之前提到的那樣使用aws cli從s3下載文件。該命令將是:

aws s3 cp s3://my-bucket/my-file.jpg C:\location\my-file.jpg 
+0

謝謝!我改變了你所說的一切,現在我得到一個錯誤,說「botocore.exceptions.DataNotFoundError」。這是否意味着它無法訪問該文件夾? – deathrow821

+0

@ deathrow821我從來沒有遇到過這個錯誤,但是一個快速的搜索讓我相信它可能是你的版本的boto3的錯誤https://github.com/boto/boto3/issues/849 – PrestonM

0
srcFileName="aws s3 cp s3://...." 

這必須是像somefolder/somekeysomekey作爲字符串的關鍵。

您正在爲其提供pathcommand