![](/img/trans.png)
[英]Python - How to get the metadata dictionary of a public Amazon S3 file?
[英]Upload images and metadata to public Amazon S3 bucket with Python requests
我知道,有用於Python的boto庫,但是,我想要做的就是將大量圖像文件(包括元數據)上傳到公共S3存儲桶。 圖像應該進入存儲桶內的各個子目錄。
使用cURL,這應該是有效的:
curl -v -F "key=test/test.jpg" -F "file=@test.jpg" http://my-public-bucket.s3.amazonaws.com/
所以我認為只應該使用urllib,urllib2和/或Python請求。 但是怎么樣? 我對Amazon S3和cURL完全陌生。
另外,將一些元數據與圖像一起存儲的最佳方法是什么? 一個額外的JSON字符串文件?
使用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_ID
和AWS_SECRET_ACCESS_KEY
的憑據。
而已。
僅適用於Python請求:
import requests
r = requests.post('my_public_bucket', files={'file': open('/path/test.txt', 'rb')}, data={'key': 'test/test.txt'})
您的cURL字符串大致轉換為以下內容:
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)
此StackOverflow答案中提供了請求的分段上傳語法的一般形式。
要上傳到已簽名的網址並請求我必須這樣做:
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>
注意:當我使用boto在我的服務器上創建url時,我設置headers = None,這樣頭文件就不會成為問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.