我想在Django中實現一個將客戶端(iPhone應用程序)的圖像上傳到Amazon S3服務器的功能。 iPhone應用程序發送一個HttpRequest(方法PUT)與HTTPBody中的圖像內容。舉例來說,客戶端圖像提出以下網址:http://127.0.0.1:8000/uploadimage/sampleImage.png/使用Django通過PUT文件上傳
我的Django的功能看起來像這樣來處理這樣的PUT請求,將文件保存到S3:
def store_in_s3(filename, content):
conn = S3Connection(settings.ACCESS_KEY, settings.PASS_KEY) # gets access key and pass key from settings.py
bucket = conn.create_bucket("somepicturebucket")
k = Key(bucket)
k.key = filename
mime = mimetypes.guess_type(filename)[0]
k.set_metadata("Content-Type", mime)
k.set_contents_from_string(content)
k.set_acl("public-read")
def upload_raw_data(request, name):
if request.method == 'PUT':
store_in_s3(name,request.raw_post_data)
return HttpResponse('Upload of raw data to S3 successful')
else:
return HttpResponse('Upload not successful')
我的問題是如何告訴我的功能圖像的名稱。在我的urls.py我有以下,但它不會工作:
url(r'^uploadrawdata/(\d+)/', upload_raw_data),
現在,據我所知,d +代表數字,所以它是沒有用的,顯然這裏的時候,我通過的名稱一份文件。但是,我想知道這是否是正確的方法。我讀了這篇文章here和它表明下面的代碼行,我不明白,在所有:
file_name = path.split("/")[-1:][0]
另外,我不知道什麼代碼的其餘部分是怎麼一回事。對於所有這些我都有點新意,所以如何簡單上傳圖片的任何建議都會受到歡迎。謝謝!
謝謝丹尼爾。但爲什麼相關的答案不相關?它試圖通過PUT進行上傳?我只是覺得我正在做一些根本性錯誤的事情。也許我不應該爲我的目的使用PUT,或者我應該有一些鏈接的答案中的代碼,我不明白... – 2012-02-10 20:27:01
另外,我試過url(r'^ uploadrawdata /(\ w +)/ ',upload_raw_data),但是會收到錯誤消息「當前的URL,
uploadrawdata/MD5-HASH-SOMETHING.png/
,與這些中的任何一個都不匹配。」當嘗試PUT到http://127.0.0.1:8000/uploadrawdata/MD5-HASH-SOMETHING.png/ – 2012-02-10 20:30:59