上傳文件 我們通過File API 能夠訪問到文件內容,然后把文件內容放到send()方法中,再通過POST請求,的確很容易就能實現上傳。但這樣做傳遞的是文件內容,因而服務器還得收集提交的內容,然后保存到另外一個文件中。其實,更好的做法是以表單提交方式來上傳文件。
表單方式上傳?沒錯!formData類型做這個很容易,分分鍾幾千萬上下啦。 首先,要創建一個FormData對象,通過它調用append()方法傳入相應的File對象作為參數。然后,再把FormData對象傳遞給XHR的send()方法,結果與通過表單上傳一摸一樣。
let droptarget = document.getElementById('droptarget'); function handleEvent(event) { var info = '', output = document.getElementById('output'), data, xhr, files, i, len; EventUtil.preventDefault(event); if(event.type == 'drop') { data = new FormData(); files = event.dataTransfer.files; i = 0; len = files.length; while(i < len) { data.append("file" + i, files[i]); i ++; } xhr = new XMLHttpRequest(); xhr.open("post","FileUpload.php",true); xhr.onreadystatechange = function() { if(xhr.readyState == 4) { alert(xhr.responseText); } }; xhr.send(data); } } EventUtil.addHandler(droptarget, 'dragenter', handleEvent); EventUtil.addHandler(droptarget,'dragover',handleEvent); EventUtil.addHandler(droptarget, 'dragover',handleEvent);
我們這里創建一個formData對象,與每個文件對應的鍵分別是file0,file1,file2,這樣的格式。注意不用寫額外的代碼,只要傳入File對象即可。 掃碼加群,每日更新一篇前端技術文章一起成長。
