2014-01-08 34 views
0

我知道,存在Python的boto庫,但是,我只想將大量圖像文件(包括元數據)上載到公共S3存儲桶。圖像應該進入桶內的各個子目錄。使用Python請求將圖像和元數據上傳到公共Amazon S3存儲桶

的捲曲度,這應該是工作:

curl -v -F "key=test/test.jpg" -F "[email protected]" http://my-public-bucket.s3.amazonaws.com/ 

所以我想這應該是可行的用的urllib,urllib2的和/或僅Python的請求。但是如何?我完全不熟悉亞馬遜S3 ......和cURL。

什麼是存儲一些元數據與圖像的最佳方式?一個額外的JSON字符串文件?

+0

你爲什麼想繞過'boto'的原因是什麼?只是因爲你不知道它可能?如果使用該庫,它將是一個更短,更可讀的解決方案。除非你有充足的理由不使用它... – Alfe

+0

boto是一個相當龐大的軟件包,AFAIK沒有要求籤名上傳到公共桶。那麼爲什麼要使用整個庫而不是簡單的請求調用...? –

+0

爲了免費獲得所有額外的東西,您必須手動進行其他操作,例如錯誤檢查等。 – Alfe

回答

1

你捲曲字符串轉換成大致有以下幾種:

import requests 

url = 'http://my-public-bucket.s3.amazonaws.com/' 
files = { 
    'key': ('', 'test/test.jpg'), 
    'file': open('test.jpg', 'rb'), 
} 

r = requests.post(url, files=files) 

要求多上傳語法的一般形式this StackOverflow answer被發現。

1

使用boto(2.6.0版本),你會做這樣的:

import boto 

connection = boto.connect_s3() 
bucket = connection.get_bucket('mybucket') 
key = bucket.new_key('myimage.jpg') 
key.set_contents_from_filename('myimage.jpg') 
key.set_metadata(...) 

確保你有在環境變量AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY的憑據。

就是這樣。

+0

謝謝...問題是:我們沒有憑據。這不是我們的桶,但我們需要填充我們的合作伙伴所需的內容 - 這就是爲什麼桶是公開/開放的。 –

+0

如果存儲桶訪問不受限制,那麼我猜也沒有憑據,您不會收到錯誤。 – Alfe

+0

Thx,我明天就試試看 - 現在在德國晚些時候;-)出於興趣:仍然想知道如何通過Python請求發送文件:) –

1

作品只有Python的要求:

import requests 
r = requests.post('my_public_bucket', files={'file': open('/path/test.txt', 'rb')}, data={'key': 'test/test.txt'}) 
0

要上傳到標識的URL和請求我不得不這樣做:

with open('photo_1.jpg', 'rb') as content_file: 
    content = content_file.read() 
result = requests.put(url=upload_url, headers={}, data=content) 

這是不好的,因爲它加載到一切記憶,但它應該讓你過去的初始駝背。

而且使用curl,當我不得不使用不同的選項:

curl -X PUT --upload-file photo_1.jpg <url> 

注:當我在我的博託服務器創建的URL我設置標題=無使頭部不會是一個問題。