Как сохранить двоичные данные zip файла в Javascript?
Я получаю ниже ответ от ответа AJAX:
это ответ zip файла.
сообщите мне, как сохранить этот файл .zip в Javascript. Внутри ZIP есть файл PDF.
МОЙ код выглядит так:
$.ajax({
url: baseURLDownload + "/service/report-builder/generateReportContentPDF",
beforeSend: function (xhr) {
xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
xhr.responseType = 'arraybuffer'
},
type: "POST",
data: JSON.stringify(parameter),
contentType: "application/json",
success: function(result) {
console.log("ssss->"+result);
var base64String = utf8_to_b64(result);
//window.open("data:application/zip;base64,"+base64String); // It will download pdf in zip
var zip = new JSZip();
zip.add("PDFReport.pdf", result);
content = zip.generate();
location.href="data:application/zip;base64," + content;
$.mobile.loading('hide');
},
error: function(xhr){
console.log("Request Status: " + xhr.status + " Status Text: " + xhr.statusText + " " + xhr.responseText);
$.mobile.loading('hide');
showAlert("Error occured. Unable to download Report", "Message", "OK");
}
});
RESPOSE Console.log( "ssss → " + result);
PKQF/crt_pdf_10204725.pdfuX\М8 | р ݃; ш @р ܝ Вр ݂; | С ھ ш = О]]% N # + reupY ̉ J 3) O C F M P & rA @ 7T. z (% h x x0 0Z -i % q e Mi " c -/ j 齔/ļL 瞄 0 > o [��6 멆�n��s�$�
�#>˘ '��wT�� ���3�36DK�+�̓�t6 ��r��sA:���x�<>n������'U��RLqA+���ݺ�BM��:4ĞP�}���:�}ߣP����?F)�9-�W0���2�{x��#2v8N.$V�>X=/�+�c}���ּ�\y���\*�J\��
���90�T�L� 3p���*Sfj(���PWWz��O�s�9]&�
iO | 9; 5 ʘdW cl% %;u % [ 5 Q] $[L > yXg 9 2 + &, iFs Qu. E ( > W + M? E я | ���k�k�c蟴CcG�j��4s|x �F
1} Y, 290м = -om\Ly ^ О ^\uaF9: zcSy -gfunCT: {
4 &/
LM998
& Амп;! Pnc господин ~) ~ 740400M".ikjGM-
Ответы
Ответ 1
Наконец, я получил ответ на свой вопрос:
Вот код:
var xhr = new XMLHttpRequest();
xhr.open("POST", baseURLDownload + "/service/report/QCPReport", true);
xhr.setRequestHeader("Content-type","application/json");
xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
// alert("Failed to download:" + xhr.status + "---" + xhr.statusText);
var blob = new Blob([xhr.response], {type: "octet/stream"});
var fileName = "QCPReport.zip";
saveAs(blob, fileName);
}
}
xhr.responseType = "arraybuffer";
xhr.send(JSON.stringify(QCPParameter));
Ответ 2
Без зависимости.
Совместимость с IE 10,11, Chrome, FF и Safari:
function str2bytes (str) {
var bytes = new Uint8Array(str.length);
for (var i=0; i<str.length; i++) {
bytes[i] = str.charCodeAt(i);
}
return bytes;
}
var xhr = new XMLHttpRequest();
xhr.open("POST", baseURLDownload + "/service/report/QCPReport", true);
xhr.setRequestHeader("Content-type","application/json");
xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
// alert("Failed to download:" + xhr.status + "---" + xhr.statusText);
var blob = new Blob([str2bytes(xhr.response)], {type: "application/zip"});
var fileName = "QCPReport.zip";
if (navigator.msSaveOrOpenBlob) {
navigator.msSaveOrOpenBlob(blob, filename);
} else {
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display:none";
var url = window.URL.createObjectURL(blob);
a.href = url;
a.download = filename;
a.click();
window.URL.revokeObjectURL(url);
a.remove();
}
}
}
xhr.responseType = "arraybuffer";
xhr.send(JSON.stringify(QCPParameter));
Ответ 3
Есть библиотеки (zip.js приходит на ум) для обработки такого рода вещей, предполагая, что вы хотите получить то, что находится в zip файле. Если вы просто хотите сохранить zip файл, вы будете рассматривать его как любой другой файл.