1

JSZIP ライブラリ ファイルを使用して、この方法で 2 つの xml ファイルの zip ファイルを作成しました。つまり、

jszip.js

jszip-load.js

jszip-inflate.js

jszip-deflate.js

var zip = new JSZip();
zip.file("hi.xml", "<?xml version="1.0"?><root/></root></xml>");
zip.file("hello.xml", "<?xml version="1.0"?><pest/></pest></xml>");
//var content = zip.generate({ compression: "DEFLATE" });
var content=zip.generate({base64: true, binary: true, compression: "DEFLATE" });

このコードを追加すると、ダウンロードフォルダーに上記の2つのファイルhi.xmlとhello.xmlを含むdownloads.z​​ipを取得できるため、この圧縮部分は成功しています。

location.href="data:application/zip;base64,"+content;

しかし、HTMLフォームを使用せずにajax経由でこのzipファイルをサーバーにアップロードすると、問題が発生します。これは私がコードでやっていることです、

var oBlob = new (window.BlobBuilder || window.WebKitBlobBuilder ||
                 window.MozBlobBuilder || window.MSBlobBuilder)();

        var raw = atob(content);    //decode the base64 string
        var rawLength = raw.length;
        var uInt8Array = new Uint8Array(rawLength);
        for (var i = 0; i < rawLength; ++i) { //convert to uInt8Array
            uInt8Array[i] = raw.charCodeAt(i);
        }

        oBlob.append(uInt8Array.buffer); //append it to blobbuilder
        oMyForm.append(content, oBlob.getBlob("application/zip")); //because you create a zip file, so get the zip type

        //send it
        $.ajax({
        type: 'POST',
        url: 'requestURL',//java spring servlet URL
        async: false,
        data: { 
            name:'user',
        files:oMyForm
        },
        success: function(msg){
        },
        error : function(jqXHR, textStatus, errorThrown) {
            if(typeof jqXHR == 'object'){
                if(typeof jqXHR.responseText != 'undefined'){
                    if(jqXHR.responseText == 'success'){                        

                    }
                }
            }
        }

    });

この問題で誰かが私を助けることができますか?

私もこの方法でやりましたが、

var oBlob = new (window.BlobBuilder || window.WebKitBlobBuilder ||
                 window.MozBlobBuilder || window.MSBlobBuilder)();

    var raw = atob(content);    //decode the base64 string
    var rawLength = raw.length;
    var uInt8Array = new Uint8Array(rawLength);
    for (var i = 0; i < rawLength; ++i) { //convert to uInt8Array
        uInt8Array[i] = raw.charCodeAt(i);
    }

    oBlob.append(uInt8Array.buffer); //append it to blobbuilder
    oMyForm.append(content, oBlob.getBlob("application/zip")); //because you create a zip file, so get the zip type

    //send it
    var oReq = new XMLHttpRequest();
    oReq.open("POST", 'requestURL');
    oReq.send(oMyForm);

ここで私が見逃しているのは何ですか?zip ファイルがサーバーにポストされないのはなぜですか?

誰かが私を助けることができますか?

4

1 に答える 1

1

何よりもまず、必ず最新の JSZip バージョンを使用してください (たとえば、jszip-inflate.js はもう存在しません)。

javascriptで blob をアップロードするにはどうすればよいですか? :

var zip = new JSZip();
zip.file("hello.xml", "...");
var content = zip.generate({
    type: "blob",
    compression: "DEFLATE"
});

var fd = new FormData();
fd.append('name', 'user');
fd.append('zip', content);

$.ajax({
    type: 'POST',
    url: 'requestURL',
    data: fd,
    processData: false,
    contentType: false
}).done(function(data) {
    console.log(data);
});
于 2015-05-17T10:03:31.703 に答える