我正在开发一个 HTML WYSIWYG 编辑器,我目前正在开发一个“下载”功能,用户可以按下载按钮下载他们主题的 zip 文件。我正在使用 Python CGI 脚本来实现此功能。目前,我的脚本制作了一个 zip 文件并提示用户下载它,但是当我尝试解压缩该 zip 文件时,它只会创建另一个扩展名为“.cpgz”的 zip 文件。我相信我的脚本没有正确创建 zip。
我正在使用“zipfile”模块在内存中而不是在磁盘上创建一个 zipfile 对象,使用“StringIO”模块在内存中创建一个类似文件的对象,以及“cgi”模块来接受来自 Ajax 请求的 POST 数据。
我的问题出在我的 for 循环中。'zf' zip 文件没有从我传递给 os.walk() 的 'layoutDir' 参数中添加文件和子目录。该脚本将提示浏览器下载 zip 文件,但我无法解压缩。
#!/usr/bin/python
import sys
import os
import zipfile
import StringIO
import cgitb
cgitb.enable()
layoutDir = 'http://localhost:8888/funWYSIWYG/public/views/layouts/Marketing'
tmpZip = StringIO.StringIO()
zf = zipfile.ZipFile(tmpZip, 'w', zipfile.ZIP_DEFLATED)
for root, dirs, files in os.walk(layoutDir):
for name in files:
absfn = os.path.join(root, name)
relfn = absfn[len(layoutDir) + len(os.sep):]
zf.write(absfn, relfn)
zf.close()
sys.stdout.write("Content-Type: application/octet-stream\r\n")
sys.stdout.write("Content-Disposition: attachment; filename=\"funWYSIWYG-Marketing.zip\"\r\n\r\n")
sys.stdout.write(tmpZip.getvalue())
# Close opened file
tmpZip.close()
更新 1:我摆脱了我的代码中的一些不相关的东西。我还用“absfn”和“adsfn”纠正了错字。上面的代码现在完全代表了我在本地代码编辑器中的内容。我仍然遇到无法解压缩生成的 zip 文件的问题。
更新 2:这是我计算机上的“营销”目录的样子。
|---- Marketing
|---- css
| |---- default.css
|
|---- img
|
|---- index.html