为了账号安全,请及时绑定邮箱和手机立即绑定

Flask/Python:从绝对路径创建 zip 文件失败 - 没有这样的文件或目录

Flask/Python:从绝对路径创建 zip 文件失败 - 没有这样的文件或目录

牧羊人nacy 2021-11-02 16:34:17
我正在创建一个 CKAN 插件,以允许用户从数据库服务器中选择和下载多个资源(文件)。我使用一些 Python 代码创建了一个 Flask 视图函数,该函数应该使用请求的资源创建一个 zip 文件,但是即使我提供了绝对路径,创建也会失败并显示“没有这样的文件或目录”错误。代码基于this、this和this post,为了解决当前的问题,我已经在这里和这里检查过,但没有太大成功。代码如下:import zipfileimport iodef 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命令失败并显示“没有此类文件或目录”错误。知道出了什么问题吗?
查看完整描述

2 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

你说你想通过绝对路径访问资源,但你的示例值res是一个 URL。

我认为不zipfile.ZipFile.write支持,因为将文件添加到 zip 存档使用来自文件系统的元数据(时间戳等)。您将需要通过其本地路径访问资源,或者如果无法从应用程序容器访问,请先将其下载到临时位置。(当然,后一种情况将剥离元数据。)


查看完整回答
反对 回复 2021-11-02
  • 2 回答
  • 0 关注
  • 165 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信