(1). 首先創建一個用於上傳圖片的HTML模板,命名為ImageUpload.html:
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <meta charset="utf-8" /> </head> <body> <!--文件上傳必須設置enctype="multipart/form-data"--> <form method="post" enctype="multipart/form-data" action="ImageUpload.ashx"> <input type="file" name="imgFile" /> <input type="submit" value="上傳"/> </form> </body> </html>
模板中包含兩個input標簽,類型分別為“file”和“submit”,其中,form表單的method屬性必須為“post”,enctype為“multipart/form-data”。
(2). 在ImageUpload.html模板中判斷一下所上傳的文件是否為圖片:
<script src="../scripts/jquery-1.12.4.min.js"></script> <!--如果監聽到上傳的文件的后綴不是圖片,那就將file得到的內容設為空--> <script type="text/javascript"> $(function () { $(":file").change(function () { var fileName = $(this).val(); var ext = fileName.substr(fileName.lastIndexOf('.')); if (ext == ".jpeg" || ext == ".jpg" || ext == ".png" || ext == ".gif") { return true; } else { $(this).val(""); } }); }); </script>
(3). 新建一個名為ImageUpload.ashx的一般處理程序,為保證上傳的文件是圖片,需要在后台再次判斷一下所傳文件的格式(因為瀏覽器中可以改前台代碼):
using System; using System.IO; using System.Web; namespace ThreeLayerWebDemo.FileUpload { /// <summary> /// ImageUpload 的摘要說明 /// </summary> public class ImageUpload : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; //context.Response.Write("Hello World"); //后台拿到上傳來的圖片(拿到名為imgFile的input標簽的文件) var file =context.Request.Files["imgFile"]; //后台也要對拿到的數據是否為圖片進行校驗(因為前台可以通過瀏覽器改代碼,前台校驗完了需要后台再攔截一下) var ext= Path.GetExtension(file.FileName); if (!(ext==".jpeg"||ext==".jpg"||ext==".png"||ext==".gif")) { context.Response.Write("shit,你傳的不是圖片"); context.Response.End(); } else { //上傳的文件保存到目錄(為了保證文件名不重復,加個Guid) string path = "/Upload/" + Guid.NewGuid().ToString() + file.FileName; file.SaveAs(context.Request.MapPath(path));//必須得是相對路徑 //把圖片顯示到前端讓用戶看得到 string str = string.Format("<html><head></head><body><img src='{0}'/></body></html>", path);//必須得是絕對路徑!!!! context.Response.Write(str); } } public bool IsReusable { get { return false; } } } }
轉自:https://blog.csdn.net/asd358924810/article/details/78243446