Python 为什么GAE中的POST文件上载无法访问cgi.Fieldstorage方法?
在回答时,我遇到了一些奇怪的行为,GAE处理表单帖子上传的文件 问题一:除非我误解,Python 为什么GAE中的POST文件上载无法访问cgi.Fieldstorage方法?,python,google-app-engine,file-upload,csv,cgi,Python,Google App Engine,File Upload,Csv,Cgi,在回答时,我遇到了一些奇怪的行为,GAE处理表单帖子上传的文件 问题一:除非我误解,self.request.POST['filecsv']是一个cgi.FieldStorage实例,正如OP in(但未回答)所解释的,在,keys(),len(),以及文档中提到的所有其他方法中,对象都应该可用,但是他们在GAE中抛出了一个typeError——正如线程所述 因此,第一个问题是,为什么它们不可用 问题二:访问文件内容的简单方法是通过值属性: my_file = self.request.POST
self.request.POST['filecsv']
是一个cgi.FieldStorage实例,正如OP in(但未回答)所解释的,在,keys()
,len()
,以及文档中提到的所有其他方法中,对象都应该可用,但是他们在GAE中抛出了一个typeError——正如线程所述
因此,第一个问题是,为什么它们不可用
问题二:访问文件内容的简单方法是通过值
属性:
my_file = self.request.POST['filecsv'].value
为什么值
属性没有列在目录(self.request.POST['filecsv'])
中
最后一个问题:FieldStorage实例的所有属性是否都在GAE中工作,而我只是不知道如何使用它们
为什么没有呢
他们当然是
logging.error(self.request.POST['uploadimage'].keys)
印刷品
ERROR 2013-06-22 05:47:46,605 FileuploadHandler.py:29] <bound method FieldStorage.keys of FieldStorage(u'uploadimage', u'30.jpg')>
为了避免出现此错误,对象的内容类型应该是application/x-www-form-urlencoded
或mutlipart/*
。对于像图像或音频文件这样的单个文件,内容类型将是文件的mimetype,例如image/jpeg、audio/ogg e.t.c,因此方法\uuuuu包含
,有\u键
,键
,\uu getitem\uuuu
将为单个文件引发类型错误
为什么value属性没有列在dir中
因为它不是一个真正的属性。这是cgi.FieldStorage的\uu getattr\uu
方法
def __getattr__(self, name):
if name != 'value':
raise AttributeError, name
if self.file:
self.file.seek(0)
value = self.file.read()
self.file.seek(0)
elif self.list is not None:
value = self.list
else:
value = None
return value
因此,除非您实现自己的\uuu dir\uu
方法,否则dir()
不会知道它
如果在尝试访问虚拟值属性时遇到以下错误
AttributeError: 'unicode' object has no attribute 'value'
然后需要将HTML表单的enctype设置为多部分/表单数据
为什么没有呢
他们当然是
logging.error(self.request.POST['uploadimage'].keys)
印刷品
ERROR 2013-06-22 05:47:46,605 FileuploadHandler.py:29] <bound method FieldStorage.keys of FieldStorage(u'uploadimage', u'30.jpg')>
为了避免出现此错误,对象的内容类型应该是application/x-www-form-urlencoded
或mutlipart/*
。对于像图像或音频文件这样的单个文件,内容类型将是文件的mimetype,例如image/jpeg、audio/ogg e.t.c,因此方法\uuuuu包含
,有\u键
,键
,\uu getitem\uuuu
将为单个文件引发类型错误
为什么value属性没有列在dir中
因为它不是一个真正的属性。这是cgi.FieldStorage的\uu getattr\uu
方法
def __getattr__(self, name):
if name != 'value':
raise AttributeError, name
if self.file:
self.file.seek(0)
value = self.file.read()
self.file.seek(0)
elif self.list is not None:
value = self.list
else:
value = None
return value
因此,除非您实现自己的\uuu dir\uu
方法,否则dir()
不会知道它
如果在尝试访问虚拟值属性时遇到以下错误
AttributeError: 'unicode' object has no attribute 'value'
然后您需要将HTML表单的enctype设置为
多部分/表单数据
回答得好,谢谢!现在完全有意义了,因为我唯一的测试涉及单个文件。我用手掌捂住自己。回答得很好,谢谢!现在完全有意义了,因为我唯一的测试涉及单个文件。我用手掌捂住自己。