2016-06-16 16 views
1

Мой сценарий именно так, как Deform File Upload Widget example:Сохранить deform.FileData узел схемы как файл

@view_config(renderer='templates/form.pt', name='file') 
@demonstrate('File Upload Widget') 
def file(self): 

    class Schema(colander.Schema): 
     upload = colander.SchemaNode(
      deform.FileData(), 
      widget=deform.widget.FileUploadWidget(tmpstore) 
      ) 

    schema = Schema() 
    form = deform.Form(schema, buttons=('submit',)) 

    return self.render_form(form, success=tmpstore.clear) 

захваченное загрузки с test_file.grf является deform.FileData schema node, который выглядит следующим образом:

>> captured['upload'] 
{'filename': u'test_file.grf', 
'fp': <tempfile._TemporaryFileWrapper object at 0x000000000638A6A0>, 
    'mimetype': 'text/plain', 
    'preview_url': None, 
    'size': -1, 
    'uid': '42DXY7DYW3'} 

Вопрос

Как сохранить deform.FileData как файл в определенном месте?

Попытка, чтобы открыть и скопировать файл на место src дал TypeError:

with open(captured['upload']['fp'], 'r') as f: 
    shutil.copyfileobj(f, src) 

ответ

1

решаемые это просто двоичная открытие файла:

with open(src, 'wb') as f: 
    f.write(captured['upload']['fp'].read())