【问题标题】:File upload with Django via PUT通过 PUT 使用 Django 上传文件
【发布时间】:2012-03-03 07:15:50
【问题描述】:

我正在尝试在 Django 中实现一个功能,以将图像从客户端(iPhone 应用程序)上传到 Amazon S3 服务器。 iPhone 应用程序发送一个 HttpRequest(方法 PUT),其中包含 HTTPBody 中的图像内容。例如,客户端将图像 PUT 到以下 URL:http://127.0.0.1:8000/uploadimage/sampleImage.png/

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

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

【问题讨论】:

    标签: python django put boto


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢丹尼尔。但是为什么链接的答案无关紧要?它也试图通过 PUT 上传?我只是觉得我在做一些根本错误的事情。也许我不应该出于我的目的使用 PUT,或者我应该在链接的答案中有一些我不理解的代码......
    • 另外,我尝试了 url(r'^uploadrawdata/(\w+)/', upload_raw_data ),但收到错误消息“当前 URL,uploadrawdata/MD5-HASH- SOMETHING.png/,与其中任何一个都不匹配。”当试图 PUT 到 127.0.0.1:8000/uploadrawdata/MD5-HASH-SOMETHING.png
    猜你喜欢
    • 2016-12-01
    • 2016-02-22
    • 2019-05-09
    • 2010-10-18
    • 2019-07-27
    • 2022-08-09
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    相关资源
    最近更新 更多