對於Uploadify文件上傳之前已經講過一次(文件上傳~Uploadify上傳控件),只不過沒有涉及到多文件的上傳,這回主要說一下多個文件的上傳,首先,我們要清楚一個概念,多文件上傳前端Uploadify是通過輪訓的方式去調用我們的後台upload程序的,所以,對於多文件上傳來說,也沒什麼稀奇的.
下面是文件上傳後的縮略圖如下
列表的組裝使用JS模板,這樣對於復雜的HTML結構來說,可以減少拼寫錯誤的出現,關閉是將LI元素從UI元素移除,最後提交時,從UI裡檢查LI元素,然後對它進行組裝,並進行發送下面是相關代碼
一 HTML模版
<script type="text/html" id="liTemp"> <li> <!--上傳後狀態--> <div class="VedioChange"> <dl> <dt> <a href="javascript:;"> <img width="140" height='92' src="{src}" alt="{alt}" /><span class="playIcon"></span></a> <input type="hidden" name="HdFileURL" value="{FilePath}" /><br /> <input type="hidden" name="HdImagePath" value="{ImagePath}" /><br /> <input type="hidden" name="HdSourceName" value="{SourceName}" /><br /> <input type="hidden" name="HdFileSize" value="{FileSize}" /><br /> </dt> <dd><a href="javascript:;" class="lookBig">預覽</a> <a href="javascript:;" class="reselect" onclick="del(this)">關閉</a></dd> </dl> </div> <!--上傳後狀態--> </li> </script>
二 uploadfiy代碼
<script type="text/javascript"> $(document).ready(function () { $("#uploadify").uploadify({ 'uploader': 'js/jquery.uploadify-v2.1.4/uploadify.swf', 'script': 'UploadHandler.ashx', 'cancelImg': 'js/jquery.uploadify-v2.1.4/cancel.png', 'folder': '/UploadFile/', 'queueID': 'fileQueue', 'auto': true, 'multi': true, 'onComplete': function (event, queueID, fileObj, response, data) {//當單個文件上傳完成後觸發 //event:事件對象(the event object) //ID:該文件在文件隊列中的唯一表示 //fileObj:選中文件的對象,他包含的屬性列表 //[name] - 已上傳文件的名稱 //[filePath] - 已上傳文件在服務器上的路徑 //[size] – 文件的大學,單位為字節 //[creationDate] – 文件的創建日期 //[modificationDate] – 文件的最後修改日期 //[type] – 文件的擴展名,以‘.'開始 //response:服務器端返回的Response文本,我這裡返回的是處理過的文件名稱 //data:文件隊列詳細信息和文件上傳的一般數據 $("#preview").append(dataTemplate($("#liTemp").text(), { src: response, alt: fileObj.name })); }, 'onError': function (event, queueID, fileObj) {//當單個文件上傳出錯時觸發 alert("文件:" + fileObj.name + " 上傳失敗!"); }, }); }); function del(o) { $(o).closest("li").remove(); } </script>
三 html代碼
<div class="rt"> <ul class="clearfix w_VedioChange" id="preview"> </ul> </div> <div id="fileQueue"></div>
四 ashx代碼
/// <summary> /// Summary description for UploadHandler /// </summary> public class UploadHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; context.Response.Charset = "utf-8"; HttpPostedFile file = context.Request.Files["Filedata"]; string uploadPath = HttpContext.Current.Server.MapPath(@context.Request["folder"]); if (file != null) { if (!Directory.Exists(uploadPath)) { Directory.CreateDirectory(uploadPath); } file.SaveAs(Path.Combine(uploadPath, file.FileName)); var pathArr = uploadPath.Split('\\'); context.Response.Write(HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Authority + "/" + pathArr[pathArr.Length - 2] + "/" + pathArr[pathArr.Length - 1] + "/" + file.FileName); } else { context.Response.Write("0"); } } public bool IsReusable { get { return false; } } }
為大家推薦一個專題,供大家學習:《ASP.NET文件上傳匯總》
本實例只是簡單的說明了文件上傳的功能,如果在真實項目中使用的話,還需要進一步的進行代碼的設計.