Javascript を使用してバイナリ ファイルをダウンロードしたいです。
バイナリ データを返す REST サービスがあり、ファイル拡張子に関係なくバイナリ ファイルを表示できるかどうかを知りたいです。
これが私の現在のコードです:
var xhr = new XMLHttpRequest;
xhr.open("GET", requestUrl);
xhr.addEventListener("load", function () {
var ret = [];
var len = this.responseText.length;
var byte;
for (var i = 0; i < len; i++) {
byte = (this.responseText.charCodeAt(i) & 0xFF) >>> 0;
ret.push(String.fromCharCode(byte));
}
var data = ret.join('');
data = "data:application/pdf;base64," + btoa(data);
window.open(data, '_blank', 'resizable, width=1020,height=600');
}, false);
xhr.setRequestHeader("Authorization", "Bearer " + client.accessToken);
xhr.overrideMimeType("octet-stream; charset=x-user-defined;");
xhr.send(null);
ありがとう!
ベストアンサー1
MDNの記事をご覧くださいXMLHttpリクエスト。
XMLHttpRequestのレスポンスを配列バッファ次のようにすることができます:
var xhr = new XMLHttpRequest();
xhr.open("GET", requestUrl);
xhr.responseType = "arraybuffer";
xhr.onload = function () {
if (this.status === 200) {
var blob = new Blob([xhr.response], {type: "application/pdf"});
var objectUrl = URL.createObjectURL(blob);
window.open(objectUrl);
}
};
xhr.send();
オプション2:
使用できるブロブXMLHttpRequestのレスポンスとして。そしてそれをFileSystemに保存します(ファイルシステムAPI)
次のようになります:
var xhr = new XMLHttpRequest();
xhr.open("GET", requestUrl);
xhr.responseType = "blob";
xhr.onload = function () {
onDownloaded(this);
};
xhr.send();
オプション3:
画像をダウンロードして「表示」するだけの場合は、次のように簡単に実行できます。
var img = new Image();
// add the onload event before setting the src
img.onload = function() {
onImageDownloaded(img);
}
// start the download by setting the src property
img.src = requestUrl