您的位置:首页 > Web前端 > JavaScript

使用 JavaScript File API 实现文件上传

2013-09-24 12:59 716 查看
原文:http://www.oschina.net/code/snippet_12_3073

function addDNDListeners(){

var container = document.getElementById("container");

var fileList = document.getElementById("fileList");

container.addEventListener("dragenter", function(event){

fileList.innerHTML ='';

event.stopPropagation();

event.preventDefault();

}, false);

container.addEventListener("dragover", function(event){

event.stopPropagation();

event.preventDefault();

}, false);

container.addEventListener("drop", handleDrop, false);

}

function handleDrop(event){

var files = event.dataTransfer.files;

event.stopPropagation();

event.preventDefault();

var fileList = document.getElementById("fileList");

for (var i = 0; i < files.length; i++) {

var file = files[i];

var li = document.createElement('li');

var progressbar = document.createElement('div');

var img = document.createElement('img');

var name = document.createElement('span');

progressbar.className = "progressBar";

img.src = files[i].getAsDataURL();

img.width = 32;

img.height = 32;

name.innerHTML = file.name;

li.appendChild(img);

li.appendChild(name);

li.appendChild(progressbar);

fileList.appendChild(li);

uploadFile(file, progressbar)

}

}

function uploadFile(file, progressbar) {

var xhr = new XMLHttpRequest();

var upload = xhr.upload;

var p = document.createElement('p');

p.textContent = "0%";

progressbar.appendChild(p);

upload.progressbar = progressbar;

upload.addEventListener("progress", uploadProgress, false);

upload.addEventListener("load", uploadSucceed, false);

upload.addEventListener("error", uploadError, false);

xhr.open("POST", "upload.jsp?fileName="+file.name);

xhr.overrideMimeType("application/octet-stream");

xhr.sendAsBinary(file.getAsBinary());

}

function uploadProgress(event){

if (event.lengthComputable) {

var percentage = Math.round((event.loaded * 100) / event.total);

console.log("percentage:" + percentage);

if (percentage < 100) {

event.target.progressbar.firstChild.style.width = (percentage*2) + "px";

event.target.progressbar.firstChild.textContent = percentage + "%";

}

}

}

function uploadSucceed(event) {

event.target.progressbar.firstChild.style.width = "200px";

event.target.progressbar.firstChild.textContent = "100%";

}

function uploadError(error) {

alert("error: " + error);

}

window.addEventListener("load", addDNDListeners, false);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: