1. ホーム
  2. javascript

JavaScriptでBytesからファイルをダウンロードする

2023-08-03 14:28:04

質問

私はAJAXの応答からバイトの形で来ているファイルをダウンロードしたいと思います。

私はそれを行うためにこの方法を試してみました。 Bolb :

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

実際にはpdfファイルをダウンロードしているのですが、ファイルそのものが壊れています。

どうすればこれを達成できるでしょうか?

どのように解決するのですか?

ずいぶん前に質問したことなので、細かいところで間違っているかもしれません。

結局のところ Blob は配列バッファを必要とすることがわかりました。そのため、base64バイトは最初に配列バッファに変換される必要があります。

そのための関数はこちらです。

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;
 }

以下は、pdfファイルを保存する私の関数です。

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();
};

この2つの関数を併用する方法を説明します。

var sampleArr = base64ToArrayBuffer(data);
saveByteArray("Sample Report", sampleArr);