【发布时间】:2019-07-02 11:27:34
【问题描述】:
我正在创建一个 CKAN 插件,以允许用户从数据库服务器中选择和下载多个资源(文件)。 我使用一些 Python 代码创建了一个烧瓶视图函数,该函数应该使用请求的资源创建一个 zip 文件,但是即使我给出了绝对路径,创建也会失败并出现“没有这样的文件或目录”错误。
代码基于this、this和this帖子,为了解决当前问题,我已经检查了here和here,但没有太大成功。
代码如下:
import zipfile
import io
def download_multiple_resources():
if request.method == "POST":
memory_file = io.BytesIO()
with zipfile.ZipFile(memory_file, "w", zipfile.ZIP_STORED) as zf:
for res in request.form.values():
zf.write(str(res), 'download.zip')
return send_file(memory_file, mimetype='application/zip', as_attachment=True, attachment_filename='download.zip')
资源由用户通过表单选择,该表单发布请求。
表单提交请求文件的完整路径,因此如果用户选择下载testfile.txt,则在上面的代码中res 的值类似于http://localhost:5000/dataset/6192bb3b-6c4a/resource/dbe39d59-b938/download/testfile.txt。 (目前在我机器上的 docker 容器中创建的服务器上进行测试)
请注意,在我的浏览器中复制粘贴上述路径可以让我毫无问题地访问该文件。
但是,zf.write 命令失败并出现“没有这样的文件或目录”错误。
知道出了什么问题吗?
【问题讨论】:
-
对于任何对此投反对票的人,您实际上可能会有所帮助并写下 1)您投反对票的原因,以便在必要时改进我的问题; 2)也许你对解决方案的想法?
标签: python flask server zipfile