我正在創建拖放上傳器,而我正在使用base64將數據發送到使用隱藏字段的服務器。 (該文件將在稍後發送,而不會立即刪除)。使用拖放上傳文件不穩定
測試小圖像文件和文本文件的效果非常好,但是當我嘗試使用20MB的zip或2MB的WAV時,整體變得不穩定。谷歌瀏覽器崩潰或顯示一個空白的輸出框,Firefox掛起很長時間,最終顯示base64字符串。 IE實際上只工作一次,並顯示最快的字符串,但仍然有不可接受的等待時間。
是我的代碼效率低下還是別的嗎?
這裏是我的代碼:
<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/propellor/drop.html
你是如何執行的base64編碼查看文件選擇方法是什麼?你使用本地的window.btoa或一些javascript製作的功能? FileReader()使用以下行輸出到它:reader.readAsDataURL(file)。 – Xotic750 2013-04-25 22:33:11
我不完全理解這是如何工作的,因爲reader.onload函數是設置輸入框的內容? – joshkrz 2013-04-25 22:35:58
將這些大文件中的一個放到html5rocks演示中時會發生什麼,該代碼來自何處?我在那裏放了一個23Mb的數據,它在幾秒鐘內就出現了。在你嘗試相同的鏈接,並在幾秒鐘內相同。 – Xotic750 2013-04-25 22:56:33