12

我正在寻找一种将文件上传到 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

我真的不明白我做错了什么。有人可以指出我正确的方向吗?

编辑:以防万一有人想知道,我计划在实际上传工作后添加一些验证。

4

3 回答 3

18

您必须为 FORM 元素提供 enctype 属性(我以前被这个咬过)。例如,您的 FORM 标记应如下所示:

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

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

于 2008-11-26T06:57:11.210 回答
5

我不会手动执行此操作,而是看一下 David Larlet 为 Django 编写的存储后端django- storages

于 2008-11-26T07:01:06.817 回答
2

添加 enctype="multipart/form-data" 似乎在 django 文档的“文件上传”部分中值得一提(http://docs.djangoproject.com/en/dev/topics/http/file-uploads/)。想法?

于 2009-03-23T21:34:01.480 回答