gpt4 book ai didi

python - Winzip 无法在 Windows 上打开由 python shutdown.make_archive 创建的存档。在 ubuntu 上存档管理器运行良好

转载 作者:行者123 更新时间:2023-12-01 05:55:42 25 4
gpt4 key购买 nike

我试图在 django http 响应中返回一个 zip 文件,代码类似于...

archive = shutil.make_archive('testfolder', 'zip', MEDIA_ROOT, 'testfolder')
response = HttpResponse(FileWrapper(open(archive)),
content_type=mimetypes.guess_type(archive)[0])
response['Content-Length'] = getsize(archive)
response['Content-Disposition'] = "attachment; filename=test %s.zip" % datetime.now()
return response

现在,当在 ubuntu 上执行此代码时,生成的下载文件可以毫无问题地打开,但在 Windows 上执行时,创建的文件不会在 winzip 中打开(给出错误“不支持的 Zip 格式”)。

我在这里缺少一些非常明显的东西吗? python 代码不应该是可移植的吗?

编辑:

感谢J.F. Sebastian对于他的评论...

创建存档时没有问题,它正在将其读回到请求中。所以,解决方案是将我的代码的第二行更改为,

response = HttpResponse(FileWrapper(open(archive)),
content_type=mimetypes.guess_type(archive)[0])

到,

response = HttpResponse(FileWrapper(open(archive, 'rb')),  # notice extra 'rb'
content_type=mimetypes.guess_type(archive)[0])

结账,my answer to this question了解更多详情...

最佳答案

您编写的代码应该可以正常工作。我刚刚从您的代码片段中运行以下行来生成 zip 文件,并且能够在 Linux 和 Windows 上提取。

archive = shutil.make_archive('testfolder', 'zip', MEDIA_ROOT, 'testfolder')

发生了一些有趣且具体的事情。我建议您检查以下内容:

  1. 使用仅包含该行的脚本在 Django 外部生成 zip 文件。然后尝试在 Windows 计算机上提取它。这将帮助您排除与 Django、Web 服务器或浏览器相关的任何问题
  2. 如果有效,请查看您压缩的文件夹中的具体内容。这些文件的名称中是否有任何有趣的字符,是否有奇怪的文件类型或超长的文件名。
  3. 在 Windows 和 Linux 中对 zip 文件运行 md5 校验和,以确保这两个文件逐字节相同。排除可能发生的任何文件损坏。

关于python - Winzip 无法在 Windows 上打开由 python shutdown.make_archive 创建的存档。在 ubuntu 上存档管理器运行良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12697431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com