最近悟出來一個道理,在這兒分享給大家:學歷代表你的過去,能力代表你的現在,學習代表你的將來。
十年河東十年河西,莫欺少年窮
學無止境,精益求精
最近在做自學MVC,遇到的問題很多,索性一點點總結下。
本篇旨在寫一篇上傳文件的博客,上傳文件中以上傳圖片最多,所以本篇以上傳圖片為例進行說明:
在進行講解之前,先聲明如下幾點:
1、本篇是結合Jquery進行圖片上傳,需要用到JQ庫:jquery-1.7.2.js 和 jquery.MultiFile.js
2、本篇用HTML5中FileReader進行圖片的展示,無需上傳就可以展示選擇的圖片,具體大家可自行查閱:HTML5+JQuery+FileReader
3、本篇分為單文件上傳及對文件上傳
效果圖如下:
以上是效果圖
下面分別以前端HTML和後端代碼進行說明:
前端JS如下:
以上便是通過FileReader讀取圖片並展示的代碼
下面就HTML進行說明如下:
Form必須加上Enctype類型、id="mainPicNum"的Input控件type為File,即:上傳控件,accept="gif|jpg|jpeg|png|bmp|pic"為該上傳控件接收的文件類型,maxlength="1"為允許上傳的最大文件數,如上效果圖中,商品配圖和商品詳情圖MaxLength均大於1,如下所示:
完整HTML代碼如下:
@{ ViewBag.Title = "FileUpLoad"; } @section css{ <script type="text/javascript">
<script src="~/Scripts/jquery-1.7.2.js"></script>
<script src="~/Scripts/jquery.MultiFile.js"></script>
$(function () { var result = document.getElementById("result"); var input = document.getElementById("mainPicNum"); if (typeof FileReader === 'undefined') { result.innerHTML = "抱歉,你的浏覽器不支持 FileReader,請使用火狐浏覽器,或其他兼容浏覽器!"; input.setAttribute('disabled', 'disabled'); } $("#mainPicNum").MultiFile({ afterFileSelect: function (element, value, master_element) { readFile.call(element); }, afterFileRemove: function (element, value, master_element) { $('img').each(function () { if ($(this).data('src') && (element.files[0].name == $(this).data('src'))) { $(this).remove(); } }); } }); function readFile() { var file = this.files[0]; if (!/image\/\w+/.test(file.type)) { alert("文件必須為圖片!"); return false; } var reader = new FileReader(); reader.readAsDataURL(file); reader.onload = function (e) { result.innerHTML += '<img data-src="' + file.name + '" src="' + this.result + '" alt="">'; } } }); $(function () { var result = document.getElementById("PicNumresult"); var input = document.getElementById("PicNum"); if (typeof FileReader === 'undefined') { result.innerHTML = "抱歉,你的浏覽器不支持 FileReader,請使用火狐浏覽器,或其他兼容浏覽器"; input.setAttribute('disabled', 'disabled'); } $("#PicNum").MultiFile({ afterFileSelect: function (element, value, master_element) { readFile.call(element); }, afterFileRemove: function (element, value, master_element) { $('img').each(function () { if ($(this).data('src') && (element.files[0].name == $(this).data('src'))) { $(this).remove(); } }); } }); function readFile() { var file = this.files[0]; if (!/image\/\w+/.test(file.type)) { alert("文件必須為圖片!"); return false; } var reader = new FileReader(); reader.readAsDataURL(file); reader.onload = function (e) { result.innerHTML += '<img data-src="' + file.name + '" src="' + this.result + '" alt="">'; } } }); $(function () { var result = document.getElementById("DescriblePicNumresult"); var input = document.getElementById("DescriblePicNum"); if (typeof FileReader === 'undefined') { result.innerHTML = "抱歉,你的浏覽器不支持 FileReader,請使用火狐浏覽器,或其他兼容浏覽器"; input.setAttribute('disabled', 'disabled'); } $("#DescriblePicNum").MultiFile({ afterFileSelect: function (element, value, master_element) { readFile.call(element); }, afterFileRemove: function (element, value, master_element) { $('img').each(function () { if ($(this).data('src') && (element.files[0].name == $(this).data('src'))) { $(this).remove(); } }); } }); function readFile() { var file = this.files[0]; if (!/image\/\w+/.test(file.type)) { alert("文件必須為圖片!"); return false; } var reader = new FileReader(); reader.readAsDataURL(file); reader.onload = function (e) { result.innerHTML += '<img data-src="' + file.name + '" src="' + this.result + '" alt="">'; } } }); </script> } <form id="form1" action="FileUpLoad" method="post" enctype="multipart/form-data"> <div ></div> <table> <tr> <td> <span class="spans">商品主圖:</span> </td> <td> <input id="mainPicNum" name="mainPicNum" type="file" class="" accept="gif|jpg|jpeg|png|bmp|pic" maxlength="1" /> </td> </tr> <tr > <td></td> <td></td> </tr> <tr> <td> <span class="spans">主圖顯示區:</span> </td> <td> <div id="result"> </div> </td> </tr> <tr > <td></td> <td></td> </tr> <tr> <td> <span class="spans">商品配圖:</span> </td> <td> <input id="PicNum" name="PicNum" type="file" runat="server" class="" accept="gif|jpg|jpeg|png|bmp|pic" maxlength="5" /> </td> </tr> <tr > <td> </td> <td> </td> </tr> <tr> <td> <span class="spans">配圖顯示區:</span> </td> <td> <div id="PicNumresult"> </div> </td> </tr> <tr > <td> </td> <td> </td> </tr> <tr> <td> <span class="spans">商品詳情圖:</span> </td> <td> <input id="DescriblePicNum" name="DescriblePicNum" type="file" runat="server" class="" accept="gif|jpg|jpeg|png|bmp|pic" maxlength="5" /> </td> </tr> <tr > <td> </td> <td> </td> </tr> <tr> <td> <span class="spans">詳情圖顯示區:</span> </td> <td> <div id="DescriblePicNumresult"> </div> </td> </tr> </table> <div ></div> <input id="Submit1" type="submit" value="submit" /> </form>
前端代碼及說明就這麼多,下面我們來書寫後端代碼:
首先截圖講解:如下
紅線標注部分均是後端注意事項,代碼注釋很完善,大家自行查看,不作說明:
後端代碼整體如下:
/// <summary> /// 各個空間單個文件上傳 /// </summary> /// <param name="mainPicNum">與前台HTML file控件Name對應</param> /// <param name="PicNum">與前台HTML file控件Name對應</param> /// <param name="DescriblePicNum">與前台HTML file控件Name對應</param> /// <returns></returns> [HttpPost] public ActionResult FileUpLoad(HttpPostedFileBase mainPicNum, HttpPostedFileBase PicNum, HttpPostedFileBase DescriblePicNum) { string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + mainPicNum.FileName; string pth = Server.MapPath("~/UpLoad/") + fileName; mainPicNum.SaveAs(pth); // fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + PicNum.FileName; pth = Server.MapPath("~/UpLoad/") + fileName; PicNum.SaveAs(pth); // fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + DescriblePicNum.FileName; pth = Server.MapPath("~/UpLoad/") + fileName; DescriblePicNum.SaveAs(pth); return View(); } /// <summary> /// MVC4 上傳文件 /// </summary> /// <param name="mainPicNum">與前台HTML file控件Name對應</param> /// <param name="PicNum">與前台HTML file控件Name對應</param> /// <param name="DescriblePicNum">與前台HTML file控件Name對應</param> /// <returns></returns> [HttpPost] public ActionResult FileUpLoad(IEnumerable<HttpPostedFileBase> mainPicNum, IEnumerable<HttpPostedFileBase> PicNum, IEnumerable<HttpPostedFileBase> DescriblePicNum) { string commonPath = Server.MapPath("~/UpLoad/");//保存路徑 foreach (var file in mainPicNum) { string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + file.FileName;//創建文件名-唯一性 int filesize = file.ContentLength;//上傳文件的字節數 string fileType = file.ContentType;//上傳文件的類型 fileType = fileType.Substring(6, fileType.Length - 6); string fileTypes = "gif|jpg|jpeg|png|bmp|pic"; if (fileTypes.Contains(fileType))//如果上傳的文件屬於要求的類型 { if (filesize <= 2 * 1024 * 1024)//要求上傳的圖片小於2M { string NewcommonPath = commonPath + fileName; file.SaveAs(NewcommonPath); } } } // foreach (var file in PicNum) { string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + file.FileName;//創建文件名-唯一性 int filesize = file.ContentLength;//上傳文件的字節數 string fileType = file.ContentType;//上傳文件的類型 fileType = fileType.Substring(6, fileType.Length - 6); string fileTypes = "gif|jpg|jpeg|png|bmp|pic"; if (fileTypes.Contains(fileType))//如果上傳的文件屬於要求的類型 { if (filesize <= 2 * 1024 * 1024)//要求上傳的圖片小於2M { string NewcommonPath = commonPath + fileName; file.SaveAs(NewcommonPath); } } } // foreach (var file in DescriblePicNum) { string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + file.FileName;//創建文件名-唯一性 int filesize = file.ContentLength;//上傳文件的字節數 string fileType = file.ContentType;//上傳文件的類型 fileType = fileType.Substring(6, fileType.Length - 6); string fileTypes = "gif|jpg|jpeg|png|bmp|pic"; if (fileTypes.Contains(fileType))//如果上傳的文件屬於要求的類型 { if (filesize <= 2 * 1024 * 1024)//要求上傳的圖片小於2M { string NewcommonPath = commonPath + fileName; file.SaveAs(NewcommonPath); } } } return View(); }
好了,這就是本篇上傳圖片的完整源碼,無非需要用到一個Jquery庫和多文件上傳JS,上文也給出了對應的名稱,大家可自行網上下載,也可以通過我上傳的鏈接下載:
http://files.cnblogs.com/files/chenwolong/Desktop.zip
@陳臥龍的博客