我對javascript/web編程極其新穎。我的上傳表單主要用於csv文件。我已經在使用pako來gzip我的json(在請求url中)。gzip表單輸入文件
如何在將文件發送到服務器之前對它們進行gzip壓縮?
這大約是我如何構建FORMDATA
$.each($("input[type=file]"), function(i, obj) {
$.each(obj.files, function(j, file) {
formData.append(obj.name, file); // we need to gzip the data
})
});
EDIT1:我已經成功(我認爲)gzip壓縮使用PAKO文件,但有1個問題 - 異步問題。這是我的新代碼:
$.each($("input[type=file]"), function(i, obj) {
$.each(obj.files, function(j, file) {
formData.append(obj.name, file); // we need to gzip the data
var r = new FileReader();
r.onload = function(){
var zippedResult = pako.gzip(r.result);
var oMyBlob = new Blob(zippedResult, {type : file.type}); // the blob
formData.append(obj.name, oMyBlob); // we need to gzip the data
};
r.readAsArrayBuffer(file);
})
});
// Time to send the formData!
$.ajax({......
正如你所看到的問題發生,因爲AJAX已經執行後的onload功能只跑了,所以FORMDATA是空白
EDIT2:我試圖創建一個onchange事件的輸入文件,所以這是我到目前爲止所提出的。雖然有一個問題 - 它似乎不是正確的壓縮。數據類型問題?
$("input[type=file]").change(function (event){
var fileList = this.files;
$.each(fileList,function(i,file){
var r = new FileReader();
r.onload = function(){
var zippedResult = pako.gzip(r.result);
var oMyBlob = new Blob(zippedResult, {type : file.type});
app.formData.append(event.target.name, oMyBlob, file.name);
};
r.readAsArrayBuffer(file);
});
});
是否有任何理由爲什麼我應該使用JSZip而不是pako https://github.com/nodeca/pako? – CyberMew
@CyberMew其實他們是一樣的,jszip更高級別,用pako作爲依賴。 – dimakura
不,你不能JSZip [不支持](https://github.com/Stuk/jszip/issues/209)Gzip。 –