最近在做文件上傳的功能,因為界面設計比較簡單,就沒有引用jq,但是網上大部分的上傳插件都需要jq的支持。為了一個上傳功能引用90多k的jq文件有點太小題大做了,所以就自己動手寫了一個原生js上傳的demo。下面是代碼:
<html> <head> <title></title> </head> <body> <input type="file" id="f" /> <br /> <input type="button" value="up" onclick="up()" /> <br /> <!--進度條標簽--> <progress value="0" max="100" id="progress" ></progress> <br /> <!--div模擬進度條--> <div id="progressNumber" ></div> <br /> <div id="result"></div> </body> </html> <script type="text/ecmascript"> function up() { if (document.getElementById("f").value == "") { document.getElementById("result").innerHTML = "請選擇文件"; } else { var fileObj = document.getElementById("f").files[0]; //創建xhr var xhr = new XMLHttpRequest(); var url = "upFile.ashx"; //FormData對象 var fd = new FormData(); fd.append("path", "D:\\"); //上傳路徑 fd.append("file", fileObj); fd.append("acttime",new Date().toString()); //本人喜歡在參數中添加時間戳,防止緩存(--、) xhr.open("POST", url, true); xhr.send(fd); xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status == 200) { var result = xhr.responseText; document.getElementById("result").innerHTML = result; } } //進度條部分 xhr.upload.onprogress = function (evt) { if (evt.lengthComputable) { var percentComplete = Math.round(evt.loaded * 100 / evt.total); document.getElementById('progress').value = percentComplete; document.getElementById('progressNumber').style.width = percentComplete + "%"; } }; } } </script>
using System; using System.Web; namespace upFile { /// <summary> /// upFile 的摘要說明 /// </summary> public class upFile : IHttpHandler { public void ProcessRequest(HttpContext context) { string savePath = context.Request["path"]; HttpPostedFile file = context.Request.Files[0]; //文件擴展名 string fileType = System.IO.Path.GetExtension(file.FileName); //存到文件服務器的文件名稱 用當前時間命名 string fileNewName = DateTime.Now.ToString("yyyyMMddHHmmss_fff") + fileType; try { file.SaveAs(savePath + fileNewName); context.Response.Write("上傳成功!"); } catch (Exception ex) { context.Response.Write("上傳失敗!錯誤信息:" + ex.Message.ToString()); } } public bool IsReusable { get { return false; } } } }
說明:
根據網上相關資料,據說支持H5的浏覽器才FormDate對象,具體沒有進行調試。
在上傳比較小的文件時,progress標簽顯示效果沒有div標簽顯示准確。
在調試過程中發現chrome浏覽器不支持onprogress。。。求大神指點。