我正在使用Flask编写应用程序,我想要的其中一项内容是能够上传符合特定表单的ZIP;因此,我有一个小函数,从表单中获取FileStorage
对象,首先解压缩它,检查内容,然后尝试保存。但是有一个问题 - 显然解压缩它会“破坏”FileStorage
对象,如下所示:
def upload_modfile(modfile):
if not modfile.filename.endswith('.zip'):
raise ModError('Incorrect filename')
mod_path = join(get_mods_path(), secure_filename(modfile.filename))
if isfile(mod_path):
raise ModError('File ' + modfile.filename + ' already exists')
modzip = ZipFile(modfile)
base_filename = modfile.filename[:-4]
modzip_contents = modzip.namelist()
if join(base_filename, 'info.json') not in modzip_contents:
raise ModError('Could not validate file')
modfile.save(mod_path)
return True
将modfile
保存为Archive: <filename>.zip
的文本文件。如果我注释掉整个ZipFile
位(即涉及modzip
的所有内容),则文件保存得很好。
我几乎是Python的新手,对于在这种情况下该做什么感到有点困惑,除了在/tmp
中保存文件。我应该以某种方式克隆modfile
吗?有没有办法在FileStorage
内“重绕”我指向的流指针?