ドラッグ アンド ドロップ アップローダを作成しており、非表示フィールドを使用して base64 を使用してデータをサーバーに送信しています。(ファイルはドロップされた直後ではなく、後で送信されます)。
小さな画像ファイルとテキスト ファイルのテストは非常にうまく機能しますが、20MB の zip または 2MB の WAV を試すと、全体が不安定になります。Google Chrome がクラッシュするか、空白の出力ボックスが表示され、Firefox が長時間ハングし、最終的に base64 文字列が表示されます。IE は実際には 1 回だけ機能し、文字列を最速で表示しますが、それでも許容できないほどの待機時間があります。
私のコードは非効率的ですか、それとも何か他のものですか?
これが私のコードです:
<div id="drop_zone">Drop files here</div>
<input name="filebox" type="text" id="filebox" size="300">
<output id="list"></output>
<script>
function handleFileSelect(evt) {
evt.stopPropagation();
evt.preventDefault();
var filelist = evt.dataTransfer.files; // FileList object.
file = filelist[0];
var reader = new FileReader()
reader.onload = function(e) {
document.getElementById('filebox').value = e.target.result;
}
reader.readAsDataURL(file) //readAsdataURL
}
function handleDragOver(evt) {
evt.stopPropagation();
evt.preventDefault();
evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.
}
var dropZone = document.getElementById('drop_zone');
dropZone.addEventListener('dragover', handleDragOver, false);
dropZone.addEventListener('drop', handleFileSelect, false);
</script>
このテスト ページはhttp://www.tabbicat.info/local/propeller/drop.htmlにあります。