Ich möchte die Datei herunterladen, die in Form von Bytes von AJAX Antwort kommt.
Ich habe versucht, es mit Hilfe von Bolb
so zu machen:
var blob=new Blob([resultByte], {type: "application/pdf"});
var link=document.createElement('a');
link.href=window.URL.createObjectURL(blob);
link.download="myFileName.pdf";
link.click();
Es wird zwar die PDF-Datei heruntergeladen, die Datei selbst ist jedoch beschädigt.
Wie kann ich das erreichen?
Ich habe die Frage vor langer Zeit gestellt, daher liege ich möglicherweise in einigen Details falsch.
Es stellt sich heraus, dass Blob
Array-Puffer benötigt. Aus diesem Grund müssen Base64-Bytes zuerst in Array-Puffer konvertiert werden.
Hier ist die Funktion, um das zu tun:
function base64ToArrayBuffer(base64) {
var binaryString = window.atob(base64);
var binaryLen = binaryString.length;
var bytes = new Uint8Array(binaryLen);
for (var i = 0; i < binaryLen; i++) {
var ascii = binaryString.charCodeAt(i);
bytes[i] = ascii;
}
return bytes;
}
Hier ist meine Funktion zum Speichern einer PDF-Datei:
function saveByteArray(reportName, byte) {
var blob = new Blob([byte], {type: "application/pdf"});
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
var fileName = reportName;
link.download = fileName;
link.click();
};
So verwenden Sie diese beiden Funktionen zusammen:
var sampleArr = base64ToArrayBuffer(data);
saveByteArray("Sample Report", sampleArr);
Sie müssen nur eine zusätzliche Zeile hinzufügen, und es sollte funktionieren. Ihre Antwort ist ein Byte-Array aus Ihrer Server-Anwendung
var bytes = new Uint8Array(resultByte); // pass your byte response to this constructor
var blob=new Blob([bytes], {type: "application/pdf"});// change resultByte to bytes
var link=document.createElement('a');
link.href=window.URL.createObjectURL(blob);
link.download="myFileName.pdf";
link.click();
Setze Blob
type
auf Blob
Konstruktor anstatt auf createObjectURL
var blob = new Blob([resultByte], {type: "application/pdf"});
var link = document.createElement("a");
link.href = window.URL.createObjectURL(blob);
link.download = "myFileName.pdf";
link.click();