XMLHttpRequestまたはfetchを使用して大きなファイルをダウンロードする必要があります。ファイルをRAM-Memoryに保存しないでください。JavaScriptで大きなファイルをダウンロードするには
リクエストのヘッダーにベアラートークンを送信する必要があるため、通常のリンクダウンロードは機能しません。
私はファイルをダウンロードすることができましたが、この「解決策」はファイルがRAM-Memoryに保存されてから保存ダイアログが表示されます。 RAMメモリ。ここで
はフェッチと私の「ソリューション」です:
var myHeaders = new Headers();
myHeaders.append('Authorization', `Bearer ${token}`);
var myInit = { method: 'GET',
headers: myHeaders,
mode: 'cors',
cache: 'default' };
var a = document.createElement('a');
fetch(url,myInit)
.then((response)=> {
return response.blob();
})
.then((myBlob)=> {
a.href = window.URL.createObjectURL(myBlob);
var attr = document.createAttribute("download");
a.setAttributeNode(attr);
a.style.display = 'none';
document.body.appendChild(a);
a.click();
a.remove();
});
そしてここでは、XMLHttpRequestを持つ私の「ソリューション」です:
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange =()=>{
if (xhttp.readyState == 4){
if ((xhttp.status == 200) || (xhttp.status == 0)){
var a = document.createElement('a');
a.href = window.URL.createObjectURL(xhttp.response); // xhr.response is a blob
var attr = document.createAttribute("download");
a.setAttributeNode(attr);
a.style.display = 'none';
document.body.appendChild(a);
a.click();
a.remove();
}
}
};
xhttp.open("GET", url);
xhttp.responseType = "blob";
xhttp.setRequestHeader('Authorization', `Bearer ${token}`);
xhttp.send();
質問は、私はファイルが使用可能RAM、より大きなダウンロードすることができる方法であります - メモリと同時にヘッダを設定しますか?
ここで答えを見つけることができます:https://stackoverflow.com/questions/4545311/download-a-file-by-jquery-ajax – juancab
@juancab jQueryファイルのダウンロードの継ぎ目が解決策ではない、私はできませんもし私が間違っていなければ、私のヘッダー(ベアラトークン)を送ることさえできます、jQuery。私がすでに解決したことを解決するための単なる解決策ではなく、セーブダイアログを得ることです。私はテストされていませんが、jQueryファイルのダウンロードには同じような問題があると思います.RAMメモリよりも大きなファイルをダウンロードしています。 – Sheki