Python 通过PUT使用Django上传文件

Python 通过PUT使用Django上传文件,python,django,put,boto,Python,Django,Put,Boto,我试图在Django中实现一个函数,将一个图像从客户端(一个iPhone应用程序)上传到AmazonS3服务器。iPhone应用程序发送一个HttpRequest(methodput),其中包含HTTPBody中的图像内容。例如,客户端将图像放入以下URL: 我在Django中的函数如下所示,用于处理此类PUT请求并将文件保存到S3: def store_in_s3(filename, content): conn = S3Connection(settings.ACCESS_KEY,

我试图在Django中实现一个函数,将一个图像从客户端(一个iPhone应用程序)上传到AmazonS3服务器。iPhone应用程序发送一个HttpRequest(methodput),其中包含HTTPBody中的图像内容。例如,客户端将图像放入以下URL:

我在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')
我的问题是如何告诉我的函数图像的名称。在my urls.py中,我有以下内容,但不起作用:

url(r'^uploadrawdata/(\d+)/', upload_raw_data ),
现在据我所知,d+代表数字,所以当我传递文件名时,它在这里显然没有用。然而,我想知道这是否是正确的方式在第一位。我读了这篇文章,它提出了以下一行我根本不懂的代码:

file_name = path.split("/")[-1:][0]

另外,我不知道代码的其余部分是关于什么的。我对这一切都有点陌生,所以任何关于如何简单上传图片的建议都是非常受欢迎的。谢谢

这个问题实际上不是关于上传的,链接的答案与此无关。如果要接受URL中的字符串而不是数字,为了传递文件名,可以在正则表达式中使用
w
而不是
d

编辑以澄清抱歉,您没有意识到您试图传递整个文件+扩展名。你可能想要这个:

r'^uploadrawdata/(.+)/$'

所以它可以匹配任何字符。不过,您可能应该阅读正则表达式的介绍。

谢谢Daniel。但为什么连在一起的答案无关紧要呢?它也试图通过PUT进行上传?我只是觉得我在做一些根本错误的事情。也许我不应该出于我的目的使用PUT,或者也许我应该在链接的答案中包含一些我不理解的代码……此外,我尝试了url(r'^uploadrawdata/(\w+/),upload_raw_data),--但在尝试将其放入时收到错误消息“当前url,
uploadrawdata/MD5-HASH-SOMETHING.png/
,与这些内容都不匹配。”