JS下载的存档会抛出“存档格式未知或已损坏”

时间:2017-02-08 08:47:46

标签: javascript zip blob

我一直在解决下载的zip文件问题。当我点击存档时,它会抛出“存档格式未知或已损坏”。我认为问题在于编码(存档内容的格式)。请帮忙!

$.ajax({
    url: '/Unloading/' + $("#radioVal:checked").val(),
    type: "POST",
    data: { 'dateTimeTo': $("#dateTimeTo").val(), 'dateTimeFrom': $("#dateTimeFrom").val() },
    beforeSend: function() {$("#divLoading").show();},
    success: function (result) {
        $("#divLoading").hide();
        if (result.length === 0) {
            var message ="Error";
            $("#dialog-message").text(message);
            $("#dialog-message").dialog({
                modal: true,
                buttons: {
                    close: function() {
                        $(this).dialog("close");
                    }
                }
            });
        } else {
            var xmlstr, filename, bb;
            filename = "UnloadedLeases.zip";
            bb = new Blob([result], { type: "application/zip" }); // I think somewhere here is a problem with the coding

            var pom = document.createElement('a');
            pom.setAttribute("target", "_blank");
            pom.setAttribute('href', window.URL.createObjectURL(bb));
            pom.setAttribute("download", filename);
            document.body.appendChild(pom);
            pom.click();
            document.body.removeChild(pom); //removing the element a from the page
        }
    },

1 个答案:

答案 0 :(得分:0)

据我所知,$.ajax并不能让您下载二进制内容(它会尝试从UTF-8解码您的二进制文件并破坏它)。使用jQuery插件(如jquery.binarytransport.js)或直接使用xhr(使用responseType)。

$.ajax({
    url: '/Unloading/' + $("#radioVal:checked").val(),
    type: "POST",
    dataType: 'binary',                       // using jquery.binarytransport.js
    // ...

    success: function (result) {
        // Default response type is blob
        if (result.size === 0) { // instead of length for blobs
            // ...
        } else {
            var bb = result; // already a blob
            // ...
        }
    }
})