html5多文件上傳、帶有進度條顯示


要求:使用html5中file控件實現多文件上傳,如實傳圖片顯示圖片。並且添加進度顯示上傳進度

html+一般處理程序。

<!DOCTYPE html >

<html > <head>    

<title>圖片上傳</title>    

<script src="jquery-1.4.1.js" type="text/javascript"></script>    

<script type="text/javascript">        

function fileSelected() {        

//當選擇文件時先清空原有的div中,此方法是加載文件信息與進度條問題關鍵            

$("#messages").text("");            

a = 0;            

//獲取文件集合            

var file = document.getElementById('fileToUpload').files;            

//獲取文件各數            

var fileNum = document.getElementById("fileToUpload").files.length;            

for (var i = 0; i < fileNum; i++) {                

//讀取圖片信息                

showMsg(file[i], i);            

}        

}        

//展示信息        

function showMsg(file, i) {            

if (file) {            

//轉化為kb和MB格式。文件的名字、大小、類型都是可以現實出來。                

var fileSize = 0;                

if (file.size > 1024 * 1024) {                    

fileSize = (Math.round(file.size * 100 / (1024 * 1024)) / 100).toString() + 'MB';                

}                

else {                    

fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() + 'KB';                

}            

}            

//圖片上傳的是圖片還是其他            

if (file.type.indexOf("image") == 0) {                

//拼接字符串                

var msg = "圖片名稱:" + file.name + ";圖片大小:" + file.size + ";圖片類型:" + file.type + "<br/><br/>";                

//如果是創建filereader對象                

var reader = new FileReader();                

reader.onload = function (e) {                    

// e.target.result 的返回結果就是本地圖片的路徑,同時創建進度條和現實信息                    

var imgStr = "<img src='" + e.target.result + "' width='200px' height='200'/><progress id='num" + i + "' ></progress><span id='" + i + "'></span><br/>";                     $("#messages").append(msg);                    

$("#messages").append(imgStr);                

};                

reader.readAsDataURL(file);            

}            

else {            

//如果是文件的                

var msg = "文件名稱:" + file.name + ";文件大小:" + file.size + ";文件類型:" + file.type + "<br/><progress id='num" + i + "' ></progress><span id='" + i + "'></span><br/><br/>";                

$("#messages").append(msg);            

}        

}        

//全局變量a將是作為加載進度條的id值;        

var a = 0;        

var fileNum;        

var file;        

//單文件上傳        

function uploadFile1(a) {            

fileNum = document.getElementById("fileToUpload").files.length;           

 file = document.getElementById('fileToUpload').files;            

//單文件上傳顯示是沒有太大的問題,但是多文件上傳就得考慮進度條的顯示問了,            

//uploadProgress(evt) 事件是XMLHttpRequest Leve 2中新加的內容,可以直接用來            

//監聽文件上傳時文件的詳情信息,但是多文件上傳總是最后才會觸發此事件,並且是            

//沒有什么規律可言,那么就要處理使沒上傳一個文件就讓他必須觸發此事件。            

uploadFile(file[0]);        

}        

//多文件上傳的獨立方法        

function uploadFile(file) {        

//創建FormData()對象            

var fd = new FormData();            

fd.append("author", "Shiv Kumar");            

fd.append("name", "Html 5 File API/FormData");            

//文件對象 file            

fd.append("fileToUpload", file);            

//准備使用ajax上傳            

var xhr = new XMLHttpRequest();            

//進度條            

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

//下載            

xhr.addEventListener("load", uploadComplete, false);            

//錯誤信息            

xhr.addEventListener("error", uploadFailed, false);            

//取消,此功能沒有做            

xhr.addEventListener("abort", uploadCanceled, false);            

//上傳            

xhr.open("POST", "fileUpload.ashx");            

//發送            

xhr.send(fd);        

}

       

//進度條顯示        

function uploadProgress(evt) {        

//判斷a有沒有超出范圍            

if (a < fileNum && a != fileNum) {                

//此處的evt就是文件上傳的所有信息。                

//evt.lengthComputable,文件是否是空                

if (evt.lengthComputable) {                    

//evt.loaded:文件上傳的大小   evt.total:文件總的大小                    

var percentComplete = Math.round((evt.loaded) * 100 / evt.total);                    

//加載進度條,同時顯示信息                    

document.getElementById("" + a + "").innerHTML = percentComplete.toString() + '%';                    

document.getElementById("num" + a + "").value = percentComplete / 100;                    

//如果上傳的結果是100時才讓加載下一個文件。如果不夠100會繼續上傳原來的文檔。                    

if (percentComplete == 100) {                        

a++;                        

//加載下一個文檔                        

uploadFile(file[a])                    

}                

}

           

} ////  else { ////document.getElementsByName('progressNumber').innerHTML = 'unable to compute'; ////            }

}

        function uploadComplete(evt) {         }

        function uploadFailed(evt) {             alert("上傳失敗.");         }

        function uploadCanceled(evt) {             alert("取消.");         }     

</script>

</head>

<body>    

<form id="upload" action="fileUpload.ashx" method="post" enctype="multipart/form-data">    

<input type="hidden" id="_viewstate" value="-1" />    

<div>        

  <label for="fileselect">           

請選擇文件</label>        

<input type="file" multiple="mulitple" name="fileselect[]" id="fileToUpload" onchange="fileSelected();" />    

</div>       

<div id="messages" style="border: 1px red solid">         

<p>

            文件信息:</p>    

</div>    

<input type="button" value="上傳" onclick="uploadFile1()" />    

</form>

</body>

</html>

---------------html代碼貼完------------此代碼是測試過的,不過要加載到vs中,還要支持html5多文件上傳-------

<%@ WebHandler Language="C#" class="fileUpload" %>

using System;

using System.Web;

public class fileUpload : IHttpHandler {        

public void ProcessRequest (HttpContext context) {        

context.Response.ContentType = "text/plain";        

//上傳文件        

if (context.Request.Files.Count > 0)        

{            

HttpPostedFile file = context.Request.Files[0];

 //判斷文件上傳的長度是否為0;            

if (file.ContentLength > 0)            

{

                //創建保存路徑,獲得文件名                

string fileName = System.IO.Path.GetFileName(file.FileName);                

string path = context.Request.MapPath("temp/" + fileName);                

//將上傳的文件保存在物理路徑                

file.SaveAs(path);        

            }        

}        

}      

public bool IsReusable {        

get {             return false;         }    

}

}

----------------------就此貼完,希望能夠用的着此代碼,此功能時能拿來用用--------------------------------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM