大きなjsonデータをダウンロードしようとしています。 しかし、Uncaught RangeError: Invalid string length
につながります。大きなサイズのjsonをダウンロードするとUncaught RangeErrorを解決する方法
PLSのは、この問題を解決するために、事前に感謝を助けます。ここで
はJsfiddleです:http://jsfiddle.net/sLq3F/456/
大きなjsonデータをダウンロードしようとしています。 しかし、Uncaught RangeError: Invalid string length
につながります。大きなサイズのjsonをダウンロードするとUncaught RangeErrorを解決する方法
PLSのは、この問題を解決するために、事前に感謝を助けます。ここで
はJsfiddleです:http://jsfiddle.net/sLq3F/456/
。
ノート、デバイスでRAM
または使用可能なディスク領域不足が限られた、Save File
ダイアログが閉じ前Save File
ダイアログ4分20秒でSave
をクリックした後4:20
が.crdownload
拡張子の前に、追加の1分30秒1:30
続く、経過ファイルマネージャのGUIでファイルから削除されました。最初の4:20
ファイルがファイルシステムにダウンロードされ、Save File
ダイアログが表示されている間、マウスポインタは移動可能ですが、UIは一時的にクリックやタブの変更に反応しません。 Save File
ダイアログが閉じてファイルがファイルシステムにダウンロード中で、拡張子が.crdownload
の場合、UIは通常の機能に戻ります。
上記のプロセスの終了時に、ファイルは合計サイズ189.8 MB (189,778,220 bytes)
のローカルファイルシステムに正常にダウンロードされました。
<!DOCTYPE html>
<html>
<head>
<style>
code {
color:navy;
background-color:#eee;
padding:2px;
}
</style>
</head>
<body>
<button>Request File</button><br>
<progress min="0" max="189778220" value="0"></progress>
<output></output>
<br><br>
<label></label>
<script>
var url = "https://raw.githubusercontent.com/zemirco/sf-city-lots-json/master/citylots.json";
var button = document.querySelector("button");
var progress = document.querySelector("progress");
var label = document.querySelector("label");
var output = document.querySelector("output");
var request = (url) => {
label.innerHTML = `Requesting <code>${url}</code> at ${new Date()}.<br><br>`;
return fetch(url)
.then(response => response.body.getReader())
.then(reader => {
var decoder = new TextDecoder();
var json = "";
label.innerHTML += `Request successful.<br><br>Reading request body at ${new Date()}.<br><br>`;
return reader.read().then(function processData(result) {
if (result.done) {
// do stuff when `reader` is `closed`
return reader.closed.then(function() {
// return `json` string
return json;
});
};
json += decoder.decode(result.value);
output.innerHTML = ` ${json.length} of ${progress.max} bytes read`;
progress.value = json.length;
return reader.read().then(processData)
})
.then(function(data) {
var message = `Reading of <code>${url}</code> complete at ${new Date()}. <br><br>`
+ `${data.length} total bytes read. `
+ `Please allow up to 4 minutes for file to download `
+ `to filesystem after clicking <code>Save</code>.<br><br>`;
label.innerHTML += message;
var blob = new Blob([data], {
type: "application/json"
});
var file = URL.createObjectURL(blob);
var a = document.createElement("a");
a.download = "citylots.json";
a.href = file;
document.body.appendChild(a);
a.click();
var closeBlob = (e) => {
window.removeEventListener("focus", closeBlob);
blob.close();
URL.revokeObjectURL(file);
};
window.addEventListener("focus", closeBlob);
return message.replace(/<[^>]*>/g, "");
})
.catch(function(err) {
console.log("err", err)
})
});
}
var handleRequest = (e) => {
button.setAttribute("disabled", "disabled");
request(url).then(function(message) {
console.log(message);
button.removeAttribute("disabled");
})
};
button.addEventListener("click", handleRequest);
</script>
</body>
</html>
あなたは** ** 181メガバイトのファイルを取得しようとしているhttps://plnkr.co/edit/gewixzHZSKRXquZ2OVF2?p=preview
ボタンをクリックするとロードされているようですが、DevToolsにつながる時間がかかった後、ページから切断されました.Plsは私を助けます.. – selvarajmas
@selvarajmas 'Save'をクリックすると4分以上かかった'Save File'ダイアログを閉じます。ローカルファイルシステムへのファイル書き込みが完了するまでにさらに1分30秒かかります。あなたが試したデバイスでどのくらいのRAMが利用できますか? – guest271314
私はメモリ(RAM)をインストールしました。3GB – selvarajmas
私はあなたがJSONファイルで何かをループする必要があり、より管理しやすい文字列にそれを分割うと思います。
トム
あなたはJSONファイルをスニペットの例を持っていますか?
私は修正する必要があります – selvarajmas
PHPを実行しているサーバーはありますか?
私はあなたが絶対にあなたのPHP.iniファイルをチェックするか、phpinfoページを実行する必要があると信じています。なぜなら、php設定は外部リクエストではなくてもファイル転送のサイズを制限するからです。それは他の言語でも可能ですが、PHP以外ではこの問題は一度もありませんでした。
P.S.私はファイルのサイズを見ませんでした
私はあなたのJSONファイルが "TOO BIG FOR JSON"シナリオの1つだと思います。 jsonファイルに非常に多くのレコードがある場合(テストに基づいて、100000レコードがブラウザをハングアップさせ、多くのブラウザでロードできなくなった場合)、使用することはお勧めしません。
あなたはより多くの情報については、この記事を読むことができます:あなたはReadableStream
、TextDecoder()
、Blob()
、URL.createObjectURL()
返しfetch()
、Response.body.getReader()
を使用することができますHOW BIG IS TOO BIG FOR JSON?
plnkr。 (この質問を読んでいる人々に注意してください:あなたがそのフィドルリンクをクリックすると、あなたのCPUファンがスピンアップする準備ができています。) – Pointy
ええ、それは2回文字列化するデータがたくさんあります。そのデータオブジェクトの配列には206560個の項目があります。 –
ここには何の疑いもないので、十分な注意を払っていません。エラーメッセージとリンクがあります。 –