我想在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