如何使用Django(Python)和S3上传文件?

12
我正在寻找一种上传文件到S3的方法。我正在使用Django。我目前正在使用Amazon的Python库进行上传,以下是相应的代码:
视图:
def submitpicture(request):
    fuser = request.session["login"]

    copied_data = request.POST.copy()
    copied_data.update(request.FILES)
    content_type = copied_data['file'].get('content-type')
    ffile = copied_data['file']['content']
    key = '%s-%s' % (fuser, ''.join(copied_data['file']['filename'].split(' ')))
    site_s3.save_s3_data(key, ffile, content_type)

模板:

<form action="/submitpicture/" method="POST">
    <input type="file" id="file" name="file" />
    <input type="submit" value="submit" />
</form>

然而,当我实际尝试运行它时,我遇到了以下错误:

"Key 'file' not found in <QueryDict: {}>"
#MultiValueDictKeyError

我真的不知道我做错了什么,有人可以指点我吗?

编辑:以防有人想知道,当我成功上传后,我计划添加一些验证。

3个回答

19

你需要在FORM元素中提供enctype属性(我以前就因为这个被卡住了)。例如,你的FORM标签应该是这样的:

您将不得不为FORM元素提供enctype属性(我以前就被这个问题困扰过)。例如,您的FORM标记应如下所示:

<form action="/submitpicture/" method="POST" enctype="multipart/form-data" >

如果没有 enctype,你将发现自己得到一个空的 request.FILES。


5

不要手动操作,建议使用David Larlet为Django编写的存储后端 django-storages


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接