我有一個簡單的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個字節)的最大長度的限制。我正在調查,看看是否有辦法消除這個限制,或者使用其他方式通過表單發送我的數據而沒有人工限制。
好學的東西! :) –