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

我正在创建一个 CKAN 插件,以允许用户从数据库服务器中选择和下载多个资源(文件)。我使用一些 Python 代码创建了一个 Flask 视图函数,该函数应该使用请求的资源创建一个 zip 文件,但是即使我提供了绝对路径,创建也会失败并显示“没有这样的文件或目录”错误。


代码基于this、this和this post,为了解决当前的问题,我已经在这里和这里检查过,但没有太大成功。


代码如下:


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命令失败并显示“没有此类文件或目录”错误。


知道出了什么问题吗?


牧羊人nacy
浏览 166回答 2
2回答

HUWWW

你说你想通过绝对路径访问资源,但你的示例值res是一个 URL。我认为不zipfile.ZipFile.write支持,因为将文件添加到 zip 存档使用来自文件系统的元数据(时间戳等)。您将需要通过其本地路径访问资源,或者如果无法从应用程序容器访问,请先将其下载到临时位置。(当然,后一种情况将剥离元数据。)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python