끌어서 놓기 업 로더를 만들고 있는데 base64를 사용하여 숨겨진 필드를 사용하여 서버에 데이터를 보내고 있습니다. (파일은 삭제되는 즉시가 아니라 나중에 전송됩니다.)끌어서 놓기로 파일 업로드가 불안정합니다.
작은 이미지 파일과 텍스트 파일을 테스트하는 것은 효과적이지만 20MB의 압축 파일 또는 2MB의 WAV를 시도하면 전체가 불안정 해집니다. Google 크롬이 작동하지 않거나 빈 출력 상자를 표시하고 파이어 폭스가 오래 걸려 결국 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로 만들어진 함수를 사용하고 있습니까? – Xotic750
FileReader()는 다음 행으로 reader.readAsDataURL (file)을 출력합니다. reader.onload 함수가 입력 상자를 설정하기 때문에 어떻게 작동하는지 완전히 이해하지 못합니다. – joshkrz
큰 파일 중 하나를 html5rocks의 데모에 놓으면 어떻게됩니까?이 코드는 어디에서 왔습니까? 나는 거기에 23Mb를 떨어 뜨 렸고, 정보를 가지고 초 안에 나왔다. 당신도 똑같이 시도해 보았습니다. – Xotic750