Как скачать Zip-файл с помощью JSZIP в IE?

Я создал функцию для загрузки zip-файла для нескольких файлов для sharepoint.

 function create_zip() {
    var zip = new JSZip();

    $.each(filePathArray, function (i, path) {

        var filename = path; //"file" + i +".txt";
        var filee = path.substring(path.lastIndexOf('/') + 1);

        var fileURL = appweburl + "/_api/SP.AppContextSite(@target)/web/GetFileByServerRelativeUrl('" + filename + "')/$value?@target='" + hostweburl + "'";//$('#file').attr('href');
        var request = $.ajax({
            url: fileURL,
            type: "GET",
            contentType: "text/plain",

            mimeType: 'text/plain; charset=x-user-defined' // <-[1]
        });

        request.done(function (data) {
            //var filee = "MoveFiles" + count + ".txt";
            zip.file(filee, data, { binary: true }); // <- [2]
            //count++;
            vfilecount++;
            console.log(vfilecount);
            console.log(vfilecount);

            if (count == vfilecount) {
                zip.generateAsync({ type: "base64" }).then(function (data) {

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

                });

            }

        });
    });
   }

Теперь этот код работает правильно в Chrome и mozilla, но не в IE .
Пожалуйста предложите любой путь.

1 ответ

  1. Как видно в https://github.com/Stuk/jszip/issues/376 (перепост его здесь, чтобы помочь другим):

    • mimeType: 'text/plain; charset=x-user-defined' не работает в IE 10. $.ajaxпредназначен для загрузки текстового контента, а не двоичного. То же самое с XmlHttpRequest без установки responseType. Браузеры будут пытаться декодировать полученное содержимое из UTF8 и повреждать его (потому что это двоичное содержимое, а не текст). Используйте плагин jQuery (например, jquery.binarytransport.js) или использовать xhr напрямую (сxhr.responseType = "blob").
    • location.href = "data:application/zip;base64," + ... не работает в IE. Вместо этого создайте blob-объект и используйте saveAsего для запуска загрузки