2017-08-13 13 views
0
try: 

    conn = boto.connect_s3(access_key,secret_access_key) 
    bucket = conn.get_bucket(bucket_name, validate=False) 
    k1 = Key(bucket) 
    k1.key = 'Date_Table.csv' 

    # k = bucket.get_key('Date_Table.csv') 
    k1.make_public() 
    k1.get_contents_to_filename(tar) 

except Exception as e: 
    print(e) 

我收到錯誤S3ResponseError:發生403 Forbidden.An錯誤(NoSuchKey)調用GetObject的操作時:指定的鍵不存在

S3ResponseError: 403 Forbidden AccessDenied Access DeniedD9ED8BFF6D6A993Eaw0KmxskATNBTDUEo3SZdwrNVolAnrt9/pkO/EGlq6X9Gxf36fQiBAWQA7dBSjBNZknMxWDG9GI=

我嘗試了所有posibility並仍然得到同樣的錯誤。請指導我如何解決這個問題。

我嘗試如下其它手段得到錯誤

An error occurred (NoSuchKey) when calling the GetObject operation: The specified key does not exist.

session = boto3.session.Session(aws_access_key_id=access_key, aws_secret_access_key=secret_access_key,region_name='us-west-2') 
    print ("session:"+str(session)+"\n") 
    client = session.client('s3', endpoint_url=s3_url) 
    print ("client:"+str(client)+"\n") 
    stuff = client.get_object(Bucket=bucket_name, Key='Date_Table.csv') 
    print ("stuff:"+str(stuff)+"\n") 
    stuff.download_file(local_filename) 

GE

回答

0

始終使用boto3。 boto已棄用。

  1. 只要您設置AWS CLI憑證,就不需要傳遞硬編碼憑證。徹底閱讀boto3 credential setup

  2. 除非您使用不同的區域和用戶配置文件,否則沒有理由啓動boto3.session。

  3. 花時間研究服務客戶端(boto3.client)與服務資源(boto3.resources)之間的差異。

  4. 低級boto3.client更容易用於實驗。如果需要傳遞任意對象,請使用高級別boto3.resource。

以下是boto3.client("s3").download_file的簡單代碼。

import boto3 
# initiate the proper AWS services client, i.e. S3 
s3 = boto3.client("s3") 
s3.download_file('your_bucket_name', 'Date_Table.csv', '/your/local/path/and/filename') 
相關問題