如何在 IE 中使用 jszip 下载 Zip 文件?
How can I download a Zip file using jszip in IE?
我创建了一个函数来为共享点的多个文件下载一个 zip 文件。
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 中不正常。
请提出任何方法。
如 https://github.com/Stuk/jszip/issues/376 中所见(转贴于此以帮助他人):
mimeType: 'text/plain; charset=x-user-defined'
在 IE 10 中不起作用。$.ajax
用于下载文本内容,而不是二进制内容。与不设置 responseType 的 XmlHttpRequest 相同。浏览器将尝试从 UTF8 解码接收到的内容并破坏它(因为它是二进制内容,而不是文本)。使用 jQuery 插件(如 jquery.binarytransport.js)或直接使用 xhr(使用 xhr.responseType = "blob"
)。
location.href = "data:application/zip;base64," + ...
在 IE 中不起作用。而是生成一个 blob 并使用 saveAs
触发下载
我创建了一个函数来为共享点的多个文件下载一个 zip 文件。
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 中不正常。 请提出任何方法。
如 https://github.com/Stuk/jszip/issues/376 中所见(转贴于此以帮助他人):
mimeType: 'text/plain; charset=x-user-defined'
在 IE 10 中不起作用。$.ajax
用于下载文本内容,而不是二进制内容。与不设置 responseType 的 XmlHttpRequest 相同。浏览器将尝试从 UTF8 解码接收到的内容并破坏它(因为它是二进制内容,而不是文本)。使用 jQuery 插件(如 jquery.binarytransport.js)或直接使用 xhr(使用xhr.responseType = "blob"
)。location.href = "data:application/zip;base64," + ...
在 IE 中不起作用。而是生成一个 blob 并使用saveAs
触发下载