Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么GAE中的POST文件上载无法访问cgi.Fieldstorage方法?_Python_Google App Engine_File Upload_Csv_Cgi - Fatal编程技术网

Python 为什么GAE中的POST文件上载无法访问cgi.Fieldstorage方法?

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

在回答时,我遇到了一些奇怪的行为,GAE处理表单帖子上传的文件

问题一:除非我误解,
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设置为
多部分/表单数据

回答得好,谢谢!现在完全有意义了,因为我唯一的测试涉及单个文件。我用手掌捂住自己。回答得很好,谢谢!现在完全有意义了,因为我唯一的测试涉及单个文件。我用手掌捂住自己。