在App Engine(python)中处理文件上传

时间:2010-08-13 15:16:25

标签: python google-app-engine file-upload

我正在尝试使用app engine和python实现文件上传解决方案。我正在努力检查是否有实际附加到表单的文件。我正在设置enctype =“multipart / form-data”,原则上它可以工作。我的python处理程序如下所示:

fileupload = self.request.POST["content"]

if not fileupload:
    return self.error(400)

如果没有附加文件,则此方法有效。但是,如果附加了文件,则会出现以下错误:

  File "D:\eclipse_dev\workspace\test\src\handlers.py", line 351, in post
    if not fileupload:
  File "C:\Python25\lib\cgi.py", line 633, in __len__
    return len(self.keys())
  File "C:\Python25\lib\cgi.py", line 609, in keys
    raise TypeError, "not indexable"
TypeError: not indexable

在处理程序中执行任何其他操作之前,如何安全地检查上传是否存在?

感谢您的帮助。

此致 罗宾

4 个答案:

答案 0 :(得分:1)

怎么样:

fileupload = self.request.POST["content"]

if fileupload is None:
    return self.error(400)

答案 1 :(得分:0)

好吧,我使用了这个:

import cgi
.
.
fileupload = self.request.POST["content"]

if not isinstance(fileupload, cgi.FieldStorage):
   return self.error(400)

不确定这是否是最佳解决方案,但似乎有效。

答案 2 :(得分:0)

App Engine的self.request.get()方法处理POST数据就好了:

"The request object provides a get() method that returns values for arguments parsed from the query and from POST data."

请改为尝试:

def post(self):
  fileupload = self.request.get('content')
  if not fileupload:
    self.error(400)
  else:
    # Proceed normally

答案 3 :(得分:0)

我有一个关于向GAE上传文件的小教程。 http://verysimplescripts.blogspot.jp/ 还包括一个完全可行的解决方案。