2017-02-03 79 views
0

我有一個圖像的S3 bukcet網址。我正嘗試使用urllib或wget下載此映像,在這兩種情況下代碼都能成功執行,但下載了損壞的映像。當我說腐敗時,我的意思是說,對於一個2MB的圖像,只有200kb才能下載。無法下載圖像形式S3桶

urllib.urlretrieve(str(sys.argv[1]), "data/img"+str(randomword(10))+".jpg")

在行的後面部分,我只是添加隨機字符串,因爲這是要下載的圖像的名稱。

請幫忙

+0

您是否檢查了回覆?保存的圖像可能實際上是一個aws xml響應,說它由於權限或其他原因而失敗。嘗試用文本編輯器打開圖像,看看是否是這種情況。 – davidejones

+0

是的,我收到一個XML響應說'訪問Denied' '錯誤>AccessDenied拒絕訪問' – Guru

+0

我怎麼能渡過這個 – Guru

回答

1

您可以通過先認證並下載來抓取文件。我建議只使用python boto庫處理亞馬遜網絡服務。如果你這樣做的代碼看起來像這樣

import boto 

# set your AWS creds on your environment path or hardcode it 
AWS_ACCESS_KEY_ID = os.getenv("AWS_KEY_ID") 
AWS_ACCESS_SECRET_KEY = os.getenv("AWS_ACCESS_KEY") 

conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_ACCESS_SECRET_KEY) 

bucket = conn.get_bucket("my_bucket_name") 

key = bucket.get_key('file_on_s3.txt') 
key.get_contents_to_filename('where_file_goes_locally.txt') 

東西,如果你真的不想使用博託,您可以手動拼湊它,基本上做什麼博託不會從您的AWS建立正確的請求頭creds。我在我有的服務器上使用bash腳本來做到這一點。這應該指向正確的方向(https://gist.github.com/davidejones/d05f51df75e659111227),如果你想用python請求或者urllib來重寫這個,那也應該起作用。