Web2py:如何在FieldStorage中获取项目?

时间:2015-01-21 14:49:11

标签: python web2py

我有一个接受图片上传的表单:

<form name="upload" enctype="multipart/form-data" method="post" class="form-horizontal">
    <div class="control-group">
        <div class="span2">
            <label for="image" class="control-label">Upload image:</label>
        </div>
        <div class="span10">
            <input id="image" name="image" type="file" class="span7" accept="image/*"/>
        </div>
    </div>
     <div class="form-group">
        <div class="span2"></div>
        <div class="span10">
          <button class="btn btn-medium btn-primary" type="submit">Submit</button>
        </div>
      </div>   
</form>

当我request.vars['image']时,会返回以下内容:

FieldStorage('image', 'a.png', '\x89PNG\r\n\x1a\n\x00...')

如何访问这些项目?如果我尝试使用它,就像我的dict一样,我收到一个错误,该对象不可索引。我以前从未使用过FieldStorage,所以我不确定我需要做什么来访问这些数据。

2 个答案:

答案 0 :(得分:8)

如果有其他人感兴趣,这有效:

request.vars['image'].filename
request.vars['image'].value

分别用于文件名和二进制数据。只需要一个可用属性的快速摘要:http://python.about.com/od/cgiformswithpython/ss/pycgitut1_3.htm

答案 1 :(得分:1)

如果您在尝试处理表单之前尝试检查文件的某些方面,这将非常有用。我想获取上传文件的var cids = ids.Take(2).ToList();哈希,并确保之前没有上传过。上传位于字段sha256

最初,我使用了以下内容,但消耗 Field('file', 'upload')中的数据,以便在成功处理后,写入磁盘的文件为空。

request.vars.file

但是,在下面的更新代码中,datasci的答案允许您访问数据而不从file_contents = request.vars.file.read() form.vars.file_hash = hashlib.sha256(file_contents).hexdigest() form.vars.file_length = len(file_contents) 中消费它。可能很明显,但我花了很长时间才弄明白发生了什么!

request.vars.file

所有这些意味着# Is there a file - the value will be None when the page first loads and # can be 'str' if submit is pressed without a file selected. if request.vars.file != None and not isinstance(request.vars.file, str): form.vars.file_name = request.vars.file.filename form.vars.file_hash = hashlib.sha256(request.vars.file.value).hexdigest() form.vars.file_size= len(request.vars.file.value) if form.process(onvalidation=validate_dataset_upload).accepted: # notify upload has worked response.flash = ('Upload successful. A validation check will be run and ' 'you will get an email with the results when it finishes.') 函数现在可以检查基础表中是否已存在validate_dataset_upload