本系列所使用的是上傳組件是大神July開發的,他為人比較低調,一直都沒有寫博。為了感謝他將這么好的插件開源出來,在這里簡單的為他宣傳一下。在我的圈子當中,他是一位非常牛的人,前端方面非常精通,沒有解決不了的兼容性問題,而后端開發又精通多種開發語言(php、C#、VB、java等),經手開發過的大中小型項目過百。承接各種外包開發,想聯系他的話可以加入Q群327360708找July。
本上傳組件已將上傳相關的功能都封裝好了,在使用的時候,只需要使用簡單的幾行代碼,就可以實現圖片文件檢驗、上傳權限驗證、上傳路徑相關文件夾創建、文件上傳、按配置生成各種規格(縮放)圖片和進行壓縮、加水印、關聯數據表、自動刪除舊文件與數據表記錄、修改配置后所有圖片文件重新生成等功能。
支持asp.net控件、html控件、編輯器(又分為本地上傳與遠程上傳兩種)與swf(這種控件上傳方式沒有用過,目前還不太清楚怎么調用,等有空再請教July大神)等方式上傳。
本上傳組件需要創建三個數據表
上傳類型表用于設置可以上傳的文件類型
上傳配置表,它的用途大家看看字段說明就知道了,而我們主要將它用在上傳圖片的處理上,比如上傳一張圖片要生成那些格式(大、中、小與推薦圖),圖片規格是什么(寬、高與質量),用不用加水印,按什么比例生成等,在這里配置后馬上生效,上傳生成的圖片規格跟著改變。
上傳文件管理表記錄當前系統中,所有通過本上傳組件上傳到服務器中的文件信息,方便管理員進行管理操作,比如前端UI重新設計后,某些頁面圖片規格改變了,正常情況下需 要設計師手動或使用某些軟件將這些圖片全部重新修改,這樣處理工作量大且容易出錯,而本組件則可以通過在上傳配置中重新設置不同大小的圖片生成規格,然后點擊全部圖片重新生成按鈕后,程序就會在本管理表中將指定類型與配置的所有圖片按新配置,使用原來的文件名稱逐個重新生成出來。
1)進入后端管理系統,系統管理=》基礎設置=》上傳類型設置
在這里添加與管理各種允許上傳的文件類型,見下圖
2)系統管理=》基礎設置=》上傳配置管理
在這里設置上傳的各種規則,所有需要調用到上傳組件的地方,都需要這里進行配置。創建好以后獲取對應的Id值,在開發的代碼中綁定記錄,具體怎么使用后面會講到
上傳配置列表
上傳配置編輯頁面
廣告內容管理頁面,我們上傳了一個廣告圖片
這是上傳成功后,在上傳文件夾中對應生成的圖片,大家可以試試修改生成規格后重新上傳,或點擊“已上傳文件管理”頁面中的,看看圖片變化
3)系統管理=》基礎設置=》已上傳文件管理
在這里顯示所有通過本上傳組件上傳到服務器的所有記錄,可以將直接將一些不要的文件刪除,也可以點擊“圖片全部重新生成”按鈕生成圖片。
上傳組件所用的的類存放路徑與說明(原版雖然分層,但沒這么多文件,使用SQLHelper來執行數據庫更新,被我改得好像很復雜的樣子,呵呵...看起來是不是有點高大上,很難理解兼很復雜的樣子+_+...)
項目 | 文件夾路徑 | 文件名 | 說明 |
DotNet.Utilities | File | DirFileHelper.cs | 文件夾與文件操作類,主要用于文件夾創建、上傳文件添加、刪除,以及其他相關的文件操作函數 |
DotNet.Utilities | Uploader | Uploader.cs | 上傳類,文件上傳、檢查、生成、水印等各種操作 |
Solution.Dataaccess | SubSonic | UploadConfig.cs UploadFile.cs UploadType.cs ...... | 模板生成的上傳組件數據表相關實體類,以及其他數據層操作類 |
Solution.Logic.Managers | application | UploadFileBll.cs | 上傳邏輯類,主要用于權限檢查、上傳文件的相關判斷處理、增改刪上傳組件相關的數據庫信息、關聯相關數據表等功能 |
Solution.Logic.Managers | SubSonic | UploadConfigBll.cs UploadFileBll.cs UploadTypeBll.cs | T4模板生成的幾個上傳表對應的邏輯類文件,主要給第4點那些后端管理頁面所使用 |
Solution.Web.Managers | Application | FileUpload.ashx | UI層編輯器調用的上傳接口 |
Solution.Web.Managers | Application | RemoteUpload.ashx | UI層編輯器使用遠程上傳接口(在編輯器上粘貼有圖片時,將圖片下載到服務器上,實現遠程上傳) |
代碼中有三種調用上傳的方法,一種是ASP.NET控件,一種是html控件,還有是遠程上傳(即傳入遠程圖片Url自動下載更新)
ASP.NET控件上傳調用方法
1 //這個放在cs文件Page_Load函數的前面,用于生成一個隨一個Key,以便上傳完成后已上傳文件管理表綁定對應Id 2 PRotected string RndKey = RandomHelper.GetRndKey(); 3 4 #region 上傳圖片 5 //判斷前端的ASP.NET上傳控件是否選擇有上傳文件 6 if (this.filePhoto.HasFile && this.filePhoto.FileName.Length > 3) 7 { 8 //將當前頁面上傳文件綁定上傳配置表Id為7的記錄,給上傳組件的邏輯層函數調用 9 int vid = 7; //7 廣告10 //---------------------------------------------------11 //創建上傳實體12 var upload = new UploadFile();13 //調用ASP.NET上傳控件上傳函數,并獲取上傳成功或失敗信息14 result = new UploadFileBll().Upload_AspNet(this.filePhoto.PostedFile, vid, RndKey,15 OnlineUsersBll.GetInstence().GetManagerId(), OnlineUsersBll.GetInstence().GetManagerCName(),16 upload);17 this.filePhoto.Dispose();18 //---------------------------------------------------19 //沒有返回信息時表示上傳成功20 if (result.Length == 0) 21 {22 //將上傳到服務器后的路徑賦給廣告實體對應字段23 model.AdImg = upload.Path;24 }25 else26 {27 //將出錯寫入日志中28 CommonBll.WriteLog("上傳出錯:" + result); //收集異常信息29 //彈出出錯提示30 return "上傳出錯!" + result;31 }32 }33 //如果是修改,檢查用戶是否重新上傳過廣告圖片,如果是刪除舊的圖片34 if (model.Id > 0)35 {36 //刪除舊圖片37 UploadFileBll.GetInstence()38 .Upload_DiffFile(AdvertisementTable.Id, AdvertisementTable.AdImg, AdvertisementTable.TableName,39 model.Id, model.AdImg);40 41 //同步UploadFile上傳表記錄,綁定剛剛上傳成功的文件Id為當前記錄Id42 UploadFileBll.GetInstence().Upload_UpdateRs(RndKey, AdvertisementTable.TableName, model.Id);43 }44 45 #endregion
上面代碼功能大家請看注釋說明,在調用時直接復制上面代碼然后修改vid的值、頁面上傳控件名稱(filePhoto改為你自己設置的名稱)、當前數據表名稱(AdvertisementTable,這個一般在替換的時候已經改好了)和存放上傳文件路徑字段(AdImg改為當前數據表對應字段名稱)就可以了。
html控件上傳方法
1 #region 上傳圖片 2 //將當前頁面上傳文件綁定上傳配置表Id為7的記錄,給上傳組件的邏輯層函數調用 3 int vid = 7; //7 廣告 4 //--------------------------------------------------- 5 //創建上傳實體 6 var upload = new UploadFile(); 7 //調用ASP.NET上傳控件上傳函數,并獲取上傳成功或失敗信息 8 result = new UploadFileBll().Upload_Web(vid, RndKey, 9 OnlineUsersBll.GetInstence().GetManagerId(), OnlineUsersBll.GetInstence().GetManagerCName(),10 upload, "Html上傳控件名稱");11 this.filePhoto.Dispose();12 //---------------------------------------------------13 //沒有返回信息時表示上傳成功14 if (result.Length == 0)15 {16 //將上傳到服務器后的路徑賦給廣告實體對應字段17 model.AdImg = upload.Path;18 }19 else20 {21 //將出錯寫入日志中22 CommonBll.WriteLog("上傳出錯:" + result); //收集異常信息23 //彈出出錯提示24 return "上傳出錯!" + result;25 }26 27 //如果是修改,檢查用戶是否重新上傳過廣告圖片,如果是刪除舊的圖片28 if (model.Id > 0)29 {30 //刪除舊圖片31 UploadFileBll.GetInstence()32 .Upload_DiffFile(AdvertisementTable.Id, AdvertisementTable.AdImg, AdvertisementTable.TableName,33 model.Id, model.AdImg);34 35 //同步UploadFile上傳表記錄,綁定剛剛上傳成功的文件Id為當前記錄Id36 UploadFileB
新聞熱點
疑難解答