本系列所使用的是上傳組件是大神July開(kāi)發(fā)的,他為人比較低調(diào),一直都沒(méi)有寫(xiě)博。為了感謝他將這么好的插件開(kāi)源出來(lái),在這里簡(jiǎn)單的為他宣傳一下。在我的圈子當(dāng)中,他是一位非常牛的人,前端方面非常精通,沒(méi)有解決不了的兼容性問(wèn)題,而后端開(kāi)發(fā)又精通多種開(kāi)發(fā)語(yǔ)言(php、C#、VB、java等),經(jīng)手開(kāi)發(fā)過(guò)的大中小型項(xiàng)目過(guò)百。承接各種外包開(kāi)發(fā),想聯(lián)系他的話可以加入Q群327360708找July。
本上傳組件已將上傳相關(guān)的功能都封裝好了,在使用的時(shí)候,只需要使用簡(jiǎn)單的幾行代碼,就可以實(shí)現(xiàn)圖片文件檢驗(yàn)、上傳權(quán)限驗(yàn)證、上傳路徑相關(guān)文件夾創(chuàng)建、文件上傳、按配置生成各種規(guī)格(縮放)圖片和進(jìn)行壓縮、加水印、關(guān)聯(lián)數(shù)據(jù)表、自動(dòng)刪除舊文件與數(shù)據(jù)表記錄、修改配置后所有圖片文件重新生成等功能。
支持asp.net控件、html控件、編輯器(又分為本地上傳與遠(yuǎn)程上傳兩種)與swf(這種控件上傳方式?jīng)]有用過(guò),目前還不太清楚怎么調(diào)用,等有空再請(qǐng)教July大神)等方式上傳。
本上傳組件需要?jiǎng)?chuàng)建三個(gè)數(shù)據(jù)表
上傳類型表用于設(shè)置可以上傳的文件類型

上傳配置表,它的用途大家看看字段說(shuō)明就知道了,而我們主要將它用在上傳圖片的處理上,比如上傳一張圖片要生成那些格式(大、中、小與推薦圖),圖片規(guī)格是什么(寬、高與質(zhì)量),用不用加水印,按什么比例生成等,在這里配置后馬上生效,上傳生成的圖片規(guī)格跟著改變。

上傳文件管理表記錄當(dāng)前系統(tǒng)中,所有通過(guò)本上傳組件上傳到服務(wù)器中的文件信息,方便管理員進(jìn)行管理操作,比如前端UI重新設(shè)計(jì)后,某些頁(yè)面圖片規(guī)格改變了,正常情況下需 要設(shè)計(jì)師手動(dòng)或使用某些軟件將這些圖片全部重新修改,這樣處理工作量大且容易出錯(cuò),而本組件則可以通過(guò)在上傳配置中重新設(shè)置不同大小的圖片生成規(guī)格,然后點(diǎn)擊全部圖片重新生成按鈕后,程序就會(huì)在本管理表中將指定類型與配置的所有圖片按新配置,使用原來(lái)的文件名稱逐個(gè)重新生成出來(lái)。

1)進(jìn)入后端管理系統(tǒng),系統(tǒng)管理=》基礎(chǔ)設(shè)置=》上傳類型設(shè)置
在這里添加與管理各種允許上傳的文件類型,見(jiàn)下圖


2)系統(tǒng)管理=》基礎(chǔ)設(shè)置=》上傳配置管理
在這里設(shè)置上傳的各種規(guī)則,所有需要調(diào)用到上傳組件的地方,都需要這里進(jìn)行配置。創(chuàng)建好以后獲取對(duì)應(yīng)的Id值,在開(kāi)發(fā)的代碼中綁定記錄,具體怎么使用后面會(huì)講到
上傳配置列表

上傳配置編輯頁(yè)面

廣告內(nèi)容管理頁(yè)面,我們上傳了一個(gè)廣告圖片

這是上傳成功后,在上傳文件夾中對(duì)應(yīng)生成的圖片,大家可以試試修改生成規(guī)格后重新上傳,或點(diǎn)擊“已上傳文件管理”頁(yè)面中的
,看看圖片變化

3)系統(tǒng)管理=》基礎(chǔ)設(shè)置=》已上傳文件管理
在這里顯示所有通過(guò)本上傳組件上傳到服務(wù)器的所有記錄,可以將直接將一些不要的文件刪除,也可以點(diǎn)擊“圖片全部重新生成”按鈕生成圖片。

上傳組件所用的的類存放路徑與說(shuō)明(原版雖然分層,但沒(méi)這么多文件,使用SQLHelper來(lái)執(zhí)行數(shù)據(jù)庫(kù)更新,被我改得好像很復(fù)雜的樣子,呵呵...看起來(lái)是不是有點(diǎn)高大上,很難理解兼很復(fù)雜的樣子+_+...)
| 項(xiàng)目 | 文件夾路徑 | 文件名 | 說(shuō)明 |
| DotNet.Utilities | File | DirFileHelper.cs | 文件夾與文件操作類,主要用于文件夾創(chuàng)建、上傳文件添加、刪除,以及其他相關(guān)的文件操作函數(shù) |
| DotNet.Utilities | Uploader | Uploader.cs | 上傳類,文件上傳、檢查、生成、水印等各種操作 |
| Solution.Dataaccess | SubSonic | UploadConfig.cs UploadFile.cs UploadType.cs ...... | 模板生成的上傳組件數(shù)據(jù)表相關(guān)實(shí)體類,以及其他數(shù)據(jù)層操作類 |
| Solution.Logic.Managers | application | UploadFileBll.cs | 上傳邏輯類,主要用于權(quán)限檢查、上傳文件的相關(guān)判斷處理、增改刪上傳組件相關(guān)的數(shù)據(jù)庫(kù)信息、關(guān)聯(lián)相關(guān)數(shù)據(jù)表等功能 |
| Solution.Logic.Managers | SubSonic | UploadConfigBll.cs UploadFileBll.cs UploadTypeBll.cs | T4模板生成的幾個(gè)上傳表對(duì)應(yīng)的邏輯類文件,主要給第4點(diǎn)那些后端管理頁(yè)面所使用 |
| Solution.Web.Managers | Application | FileUpload.ashx | UI層編輯器調(diào)用的上傳接口 |
| Solution.Web.Managers | Application | RemoteUpload.ashx | UI層編輯器使用遠(yuǎn)程上傳接口(在編輯器上粘貼有圖片時(shí),將圖片下載到服務(wù)器上,實(shí)現(xiàn)遠(yuǎn)程上傳) |
代碼中有三種調(diào)用上傳的方法,一種是ASP.NET控件,一種是html控件,還有是遠(yuǎn)程上傳(即傳入遠(yuǎn)程圖片Url自動(dòng)下載更新)
ASP.NET控件上傳調(diào)用方法
1 //這個(gè)放在cs文件Page_Load函數(shù)的前面,用于生成一個(gè)隨一個(gè)Key,以便上傳完成后已上傳文件管理表綁定對(duì)應(yīng)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 //將當(dāng)前頁(yè)面上傳文件綁定上傳配置表Id為7的記錄,給上傳組件的邏輯層函數(shù)調(diào)用 9 int vid = 7; //7 廣告10 //---------------------------------------------------11 //創(chuàng)建上傳實(shí)體12 var upload = new UploadFile();13 //調(diào)用ASP.NET上傳控件上傳函數(shù),并獲取上傳成功或失敗信息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 //沒(méi)有返回信息時(shí)表示上傳成功20 if (result.Length == 0) 21 {22 //將上傳到服務(wù)器后的路徑賦給廣告實(shí)體對(duì)應(yīng)字段23 model.AdImg = upload.Path;24 }25 else26 {27 //將出錯(cuò)寫(xiě)入日志中28 CommonBll.WriteLog("上傳出錯(cuò):" + result); //收集異常信息29 //彈出出錯(cuò)提示30 return "上傳出錯(cuò)!" + result;31 }32 }33 //如果是修改,檢查用戶是否重新上傳過(guò)廣告圖片,如果是刪除舊的圖片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為當(dāng)前記錄Id42 UploadFileBll.GetInstence().Upload_UpdateRs(RndKey, AdvertisementTable.TableName, model.Id);43 }44 45 #endregion
上面代碼功能大家請(qǐng)看注釋說(shuō)明,在調(diào)用時(shí)直接復(fù)制上面代碼然后修改vid的值、頁(yè)面上傳控件名稱(filePhoto改為你自己設(shè)置的名稱)、當(dāng)前數(shù)據(jù)表名稱(AdvertisementTable,這個(gè)一般在替換的時(shí)候已經(jīng)改好了)和存放上傳文件路徑字段(AdImg改為當(dāng)前數(shù)據(jù)表對(duì)應(yīng)字段名稱)就可以了。
html控件上傳方法
1 #region 上傳圖片 2 //將當(dāng)前頁(yè)面上傳文件綁定上傳配置表Id為7的記錄,給上傳組件的邏輯層函數(shù)調(diào)用 3 int vid = 7; //7 廣告 4 //--------------------------------------------------- 5 //創(chuàng)建上傳實(shí)體 6 var upload = new UploadFile(); 7 //調(diào)用ASP.NET上傳控件上傳函數(shù),并獲取上傳成功或失敗信息 8 result = new UploadFileBll().Upload_Web(vid, RndKey, 9 OnlineUsersBll.GetInstence().GetManagerId(), OnlineUsersBll.GetInstence().GetManagerCName(),10 upload, "Html上傳控件名稱");11 this.filePhoto.Dispose();12 //---------------------------------------------------13 //沒(méi)有返回信息時(shí)表示上傳成功14 if (result.Length == 0)15 {16 //將上傳到服務(wù)器后的路徑賦給廣告實(shí)體對(duì)應(yīng)字段17 model.AdImg = upload.Path;18 }19 else20 {21 //將出錯(cuò)寫(xiě)入日志中22 CommonBll.WriteLog("上傳出錯(cuò):" + result); //收集異常信息23 //彈出出錯(cuò)提示24 return "上傳出錯(cuò)!" + result;25 }26 27 //如果是修改,檢查用戶是否重新上傳過(guò)廣告圖片,如果是刪除舊的圖片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為當(dāng)前記錄Id36 UploadFileB
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注