如何在webapp2中处理上传的文件

时间:2012-11-27 13:17:39

标签: python google-app-engine webapp2

谷歌appengine的webapp2有一个非常神秘的documentation regarding the handling of uploaded files

Uploaded files are available as cgi.FieldStorage (see the cgi module) instances directly in request.POST.

我有一个表单,它发出了我想要存储在NDB.JsonProperty中的JSON文件的POST请求。

有人可以提供一个简短的例子,说明如何从请求对象中读取文件?

3 个答案:

答案 0 :(得分:9)

您可以在表单中使用enctype="multipart/form-data",然后通过在处理程序中使用来获取文件内容:

raw_file = self.request.get('field_name')

然后,将raw_file作为输入传递给模型的属性。

答案 1 :(得分:5)

谷歌的文件很糟糕。我花了大约两个小时试验webapp2的请求对象,最后找到了一种方法。

检查https://stackoverflow.com/a/30969728/2310396

基本代码片段在这里:

class UploadHandler(BaseHandler):
    def post(self):
        attachments = self.request.POST.getall('attachments')

        _attachments = [{'content': f.file.read(),
                         'filename': f.filename} for f in attachments]

我们使用self.request.POST.getall('attachments')代替self.request.POST.get('attachments'),因为它们可能是HTML表单中具有相同名称的多个input字段,因此如果您只使用self.request.POST.get('attachments'),那么我只会得到其中一个。

答案 2 :(得分:0)

我没有使用How does cgi.FieldStorage store files?中描述的解决方案,而是在表单中使用了enctype =“multipart / form-data”,并且

在我通过以下方式访问文件的帖子的处理程序方法中:

file_content = self.request.POST.multi['myfieldname'].file.read()

有效!