如何使用Django(Python)和S3上传文件?
我想找个方法把文件上传到s3。我在用django。现在我使用的是亚马逊的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 个回答
2
在Django文档的“文件上传”部分,提到添加 enctype="multipart/form-data" 这个设置似乎很重要。你怎么看?(可以参考这个链接了解更多:http://docs.djangoproject.com/en/dev/topics/http/file-uploads/)
5
与其手动去做这些事情,不如看看David Larlet为Django写的存储后端,叫做 django-storages。
19
你需要在FORM元素中提供enctype属性(我之前就因为这个吃过亏)。比如,你的FORM标签应该像这样:
<form action="/submitpicture/" method="POST" enctype="multipart/form-data" >
如果没有enctype,你会发现request.FILES是空的。