wake-up-neo.com

Laden Sie die Datei von Bytes in JavaScript herunter

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?

40

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);
92

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();
8
KrishnaSingh

Setze Blobtype 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();
0
guest271314