Google appengine 的 webapp2 有一个关于处理上传文件的非常神秘的文档。
Uploaded files are available as cgi.FieldStorage (see the cgi module) instances directly in request.POST.
我有一个表单,它发出我想要存储在 NDB.JsonProperty 中的 JSON 文件的 POST 请求。
谁能提供一个简短的例子来说明我如何从请求对象中读取文件?
Google appengine 的 webapp2 有一个关于处理上传文件的非常神秘的文档。
Uploaded files are available as cgi.FieldStorage (see the cgi module) instances directly in request.POST.
我有一个表单,它发出我想要存储在 NDB.JsonProperty 中的 JSON 文件的 POST 请求。
谁能提供一个简短的例子来说明我如何从请求对象中读取文件?
您可以enctype="multipart/form-data"
在表单中使用,然后通过在处理程序中使用来获取文件内容:
raw_file = self.request.get('field_name')
然后,将 raw_file 作为输入传递给模型的属性。
谷歌的文档简直糟透了。我花了大约两个小时试验 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')
,因为它们可能是input
HTML 表单中具有相同名称的多个字段,所以如果您只使用self.request.POST.get('attachments')
,您只会得到其中一个。
而不是使用 cgi.FieldStorage 如何存储文件中描述的解决方案?,我在表单中使用了 enctype="multipart/form-data" ,并且
在帖子的处理程序方法中,我通过以下方式访问了文件:
file_content = self.request.POST.multi['myfieldname'].file.read()
有效!