我正在创建一个 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 存档使用来自文件系统的元数据(时间戳等)。您将需要通过其本地路径访问资源,或者如果无法从应用程序容器访问,请先将其下载到临时位置。(当然,后一种情况将剥离元数据。)
添加回答
举报
0/150
提交
取消