我有一个简单的web表单,它将div
(SVG文档)的内容发送到以下Python脚本。该脚本获取SVG数据并将其打印到浏览器。客户端然后将其保存为一个文件:Python CGI脚本只打印部分数据
#!/usr/bin/python
import cgi, cgitb, urllib
form = cgi.FieldStorage()
try:
data = urllib.unquote(form.getvalue('output-data'))
fn = urllib.unquote(form.getvalue('output-fn'))
except AttributeError:
data = None
fn = None
print "Content-Type: application/x-gzip"
print "Content-Disposition: attachment; filename=" + str(fn)
print "Content-Description: File to download\n"
print data;
这里是形式:
<form id="form-figure-export-svg" action="assets/src/exportSvg.py" method="POST" style="display:none;" enctype="multipart/form-data">
<input type="text" id="form-figure-svg-data" name="output-data" style="">
<input type="text" id="form-figure-svg-fn" name="output-fn" style="">
</form>
的问题是,如果表单包含大量的数据(约450-500左右KB - 实际上524288字节;请参阅下面的更新),那么Python脚本打印的数据将被截断。这会破坏SVG输出。 Chrome浏览器和Safari浏览器在不同的点截断 - 最新版本的Firefox似乎可以正常工作。
我确认表单中的数据在提交给Python脚本之前是正确的(例如,console.log($('#form-figure-svg-data').val())
)。
是否有一些参数需要添加到Python脚本中,以确保打印完整内容data
?
其他的事情我已经尝试:
- 与MIME类型
image/svg+xml
- 加入
binary
- 使用Python
StringIO
和gzip
库手动压缩SVG的Content-Transfer-Encoding
指令设置更换Content-Type
指令打印前的数据
更新
在从Webkit的浏览器(Chrome和Safari),这可能是输出的检查由于上input
字段(524288个字节)的最大长度的限制。我正在调查,看看是否有办法消除这个限制,或者使用其他方式通过表单发送我的数据而没有人工限制。
好学的东西! :) –