擅长:python、mysql、java
<p><code>FileIter</code>不是响应对象,就像您的错误消息所说的那样。它是一个可用于响应体的iterable,仅此而已。另外,<code>ZipFile</code>可以接受file对象,这在这里比文件路径更有用。让我们尝试写入<code>tmpfile</code>,然后将该文件指针倒回起始位置,并使用它在不进行任何花哨重命名的情况下写出。在</p>
<pre><code>import os
import zipfile
import tempfile
from pyramid.response import FileIter
def zipper(request):
_temp_path = request.registry.settings['_temp']
fp = tempfile.NamedTemporaryFile('w+b', dir=_temp_path, delete=True)
## creating zipfile and adding files
z = zipfile.ZipFile(fp, "w")
z.write('somefile1.txt')
z.write('somefile2.txt')
z.close()
# rewind fp back to start of the file
fp.seek(0)
response = request.response
response.content_type = 'application/zip'
response.app_iter = FileIter(fp)
return response
</code></pre>
<p>根据文档,我将<code>NamedTemporaryFile</code>上的模式改为<code>'w+b'</code>,以允许文件写入<strong>和</strong>读取。在</p>