


版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、webweb 應(yīng)用中文件的存放方式解決方案應(yīng)用中文件的存放方式解決方案解決方案解決方案 a a:將附件保存到數(shù)據(jù)庫(kù)服務(wù)器上,用戶訪問(wèn)任何一臺(tái)web 服務(wù)器都是通過(guò)連接到數(shù)據(jù)庫(kù),從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)并傳輸?shù)接脩艨蛻舳?。?yōu)點(diǎn):可以避免文件系統(tǒng)的權(quán)限問(wèn)題,文件全部放在數(shù)據(jù)庫(kù)中,非常方便文件的查找、管理和備份。缺點(diǎn):在數(shù)據(jù)庫(kù)中保存和檢索能力文件會(huì)給服務(wù)器端增加壓力。 如果數(shù)據(jù)的量過(guò)大,速度上也存在弱勢(shì)。技術(shù)儲(chǔ)備:利用 fileupload 控件的 filebytes 屬性來(lái)獲取字節(jié)數(shù)組。數(shù)據(jù)表的設(shè)計(jì)字段名數(shù)據(jù)類型說(shuō)明idint文件編號(hào)filenamevarchar(50)文件名filelengthint
2、文件大小filefitervarchar(20)文件擴(kuò)展名filebytesimage文件字節(jié)數(shù)組將文件上傳到數(shù)據(jù)庫(kù)中protected void btup_click(object sender, eventargs e)if (fileup.hasfile)string strcon = server=.;database=test;uid=sa;pwd=;sqlconnection sqlcon = new sqlconnection(strcon);sqlcon.open();sqlcommand sqlcom = new sqlcommand();sqlcom.connection
3、= sqlcon;sqlcom.commandtext=insertvalues(filename,filelength,filefiter,filebytes);sqlcom.parameters.add(filename,sqldbtype.varchar).value = fileup.filename;sqlcom.parameters.add(filelength,sqldbtype.int).value = fileup.filebytes.length;sqlcom.parameters.add(filefiter,sqldbtype.varchar).value = path.
4、getextension(fileup.filename);sqlcom.parameters.add(filebytes,sqldbtype.image).value = fileup.filebytes;sqlcom.executenonquery();sqlcon.close();上傳大文件a 中默認(rèn)是不能提交大于 4m 的表單,超過(guò)這個(gè)值是會(huì)報(bào)異常,解決方法需要配置 web.config 文件。intofile.maxrequestlength 文件上傳的最大字節(jié)數(shù),以kb 為單位。.requestlengthdiskthreshold文件上傳時(shí)緩存的大小。.executiontime
5、out文件上傳的最大上傳時(shí)間以秒為單位。注意點(diǎn).system.io.getextension()提取指定路徑的擴(kuò)展名。.mappath()獲取指定虛擬路徑對(duì)應(yīng)的服務(wù)器路徑。.為了防止文件名相同,用當(dāng)前時(shí)間作為文件名。解決方案解決方案 b b將文件保存在服務(wù)器的文件夾中。優(yōu)點(diǎn):速度上有優(yōu)勢(shì),文件上傳、下載通過(guò)鏈接讀取文件。缺點(diǎn):不便于文件的管理,比如將文件夾轉(zhuǎn)移位置,或服務(wù)器硬盤滿了,把文件放到其他地方,就得更新文件的鏈接。當(dāng)然也不利于文件資料的備份等, 如果有多個(gè) web 服務(wù)器,當(dāng)用戶訪問(wèn)其一服務(wù)器,卻得不到其他服務(wù)器文件夾的文件。原理:用 saveas 方法把文件上傳到指定的地方。prot
6、ected void btup_click(object sender, eventargs e)if (fileup.hasfile)/判斷是否有文件literal lt = new literal();/定義一個(gè) literal 用來(lái)顯示腳本if (checkfiletype(fileup.filename)/檢查上傳文件的類型string filepath = /file/ + fileup.filename;fileup.saveas(mappath(filepath);/把文件上傳到服務(wù)器的絕對(duì)路徑上lt.text = alert(文件上傳成功!);elselt.text = ale
7、rt(文件類型不正確!);this.controls.add(lt);/用來(lái)獲取文件類型public bool checkfiletype(string filename)/獲取文件的擴(kuò)展名,前提要用這個(gè)方法必須引入命名空間iostring ext = path.getextension(filename);switch (ext.tolower()case .gif:return true;case .png:return true;case .jpeg:return true;case jpg:return true;default:return false;注意事項(xiàng)注意事項(xiàng): 為了使文件
8、能上傳到服務(wù)器,asp.net 頁(yè)面關(guān)聯(lián)的 window 賬戶必須有足夠的權(quán)限來(lái)保存文件,設(shè)置權(quán)限的方法,在要上傳的目錄中點(diǎn)擊右鍵選擇安全-為 networkservice 或 asp.net 賬戶提供該文件夾的寫權(quán)限。把上傳的文件顯示到 datalist 中string uppath = mappath(/file/);directoryinfo dir = new directoryinfo(uppath);datalist1.datasource = dir.getfiles();datalist1.databind();解決方案解決方案 c c采用上傳到數(shù)據(jù)庫(kù)與服務(wù)器文件夾結(jié)合的方法。
9、 即先把文件放到服務(wù)器一個(gè)特定的文件夾中,然后再上傳到數(shù)據(jù)庫(kù)中,這樣當(dāng)用戶讀取某個(gè)文件時(shí),若文件夾中有這個(gè)文件,則直接讀取,而不用訪問(wèn)數(shù)據(jù)庫(kù)。若文件夾中沒(méi)有這個(gè)文件, 則從數(shù)據(jù)庫(kù)中讀取,再放到這個(gè)文件夾中,這樣, 當(dāng)用戶第二次訪問(wèn)同樣一個(gè)文件,就不需訪問(wèn)數(shù)據(jù)庫(kù),而直接從文件夾中讀取。優(yōu)點(diǎn):不僅有著文件夾方式的訪問(wèn)效率,而且也有數(shù)據(jù)庫(kù)存放方式的便于管理等優(yōu)勢(shì)。缺點(diǎn):上傳到數(shù)據(jù)庫(kù)的話還是存在速度的上的弱勢(shì),也會(huì)造成數(shù)據(jù)冗余。解決方案解決方案 d d針對(duì)方案針對(duì)方案 b b 將文件上傳到服務(wù)器文件夾, 在多臺(tái) web 服務(wù)器上開啟文件同步的服務(wù), 用戶上傳了附件到一臺(tái)服務(wù)器上,通過(guò)文件同步服務(wù)將所有
10、新上傳的附件同步其他所有web服務(wù)器上,這樣就會(huì)在每臺(tái)服務(wù)器上保存一個(gè)附件的副本, 訪問(wèn)其一服務(wù)器,能夠獲取其他服務(wù)器的文件,但是及其浪費(fèi)空間,而且文件的同步還存在延時(shí)和失敗的情況。解決方案解決方案 e e文件上傳到服務(wù)器文件夾, 用數(shù)據(jù)庫(kù)來(lái)進(jìn)行管理, 把文件上傳到服務(wù)器的同時(shí), 將此文件的名字,長(zhǎng)度,存儲(chǔ)的服務(wù)器名稱,路徑等信息保存到數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)保存的是路徑,通過(guò)讀取數(shù)據(jù)庫(kù)里的路徑地址查到要找的文件優(yōu)點(diǎn):非常方便文件的查找、管理和備份。數(shù)據(jù)庫(kù)的負(fù)擔(dān)也不重,數(shù)據(jù)量過(guò)大時(shí),存儲(chǔ)速度也很快。如果換服務(wù)器時(shí),只要在數(shù)據(jù)庫(kù)里修改名稱就可以。缺點(diǎn):備份和恢復(fù)數(shù)據(jù)的時(shí)候比較麻煩,同時(shí)還要解決好,刪除數(shù)據(jù)
11、庫(kù)的文件記錄,是否還要?jiǎng)h除文件本身。文件讀取的時(shí)候還要把相對(duì)地址轉(zhuǎn)為絕對(duì)地址。案例:購(gòu)物網(wǎng)站商品的信息數(shù)據(jù)庫(kù), 數(shù)據(jù)庫(kù)一張表, 后臺(tái)上傳圖片后,圖片會(huì)保存在服務(wù)器的文件夾下,圖片的路徑保存在商品信息表中。 最后,圖片在前臺(tái)從數(shù)據(jù)庫(kù)的路徑讀取服務(wù)器的圖片顯示出來(lái)。技術(shù)儲(chǔ)備:利用 fileupload 控件protected void button1_click(object sender, eventargs e)/判斷上傳格式是否符合bool flag = false;if (fileuploadpic.hasfile)/獲取當(dāng)前文件的格式string fileextension = syst
12、em.io.path.getextension(fileuploadpic.filename).toupper();/只允許上傳格式string allowextension = .jpg, .gif, .png, .bmp, .jpeg,.swf ;for (int i = 0; i allowextension.length; i+)if (fileextension = allowextensioni)flag = true;/如果符合上傳模式if (flag)string name = fileuploadpic.filename; /獲取文件名string newname = ses
13、sionphotos1.tostring() + _ + name; /重命名文件名,以免跟文件夾現(xiàn)有的文件重名string ipath = server.mappath(photos) + + newname; /指定文件在服務(wù)器上的保存路徑datetime date = system.datetime.now; /獲取當(dāng)前時(shí)間fileuploadpic.saveas(ipath);/ 將選定在控件上的文件保存到服務(wù)器指定的目錄string sql = insert into bookphoto(bookimage) values( + ipath + );/把文件在服務(wù)器上的路徑保存到數(shù)據(jù)/ 調(diào)用數(shù)據(jù)庫(kù)的類,添加到數(shù)據(jù)庫(kù)中。db db = new db();sqlconnection cnn = db.connectioncnnstring1;int i = db.addtable(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能客服系統(tǒng)定制研發(fā)與多渠道接入與智能營(yíng)銷服務(wù)合同
- 小紅書網(wǎng)紅直播帶貨合作人收益分成與銷售協(xié)議
- 果園果樹種植與休閑農(nóng)業(yè)融合發(fā)展承包協(xié)議
- 石油化工儲(chǔ)罐防腐保溫工程設(shè)計(jì)與施工合同
- 婚后數(shù)碼產(chǎn)品共享與維護(hù)責(zé)任協(xié)議
- 醫(yī)院潔凈區(qū)BIM管線設(shè)計(jì)與施工及驗(yàn)收合同
- 農(nóng)業(yè)生態(tài)保護(hù)與修復(fù)有限合伙投資協(xié)議
- 海外醫(yī)療設(shè)施租賃與醫(yī)療技術(shù)支持合同
- 防止婚外情夫妻忠誠(chéng)執(zhí)行及財(cái)產(chǎn)保全協(xié)議
- 電商平臺(tái)商品上架與消費(fèi)者權(quán)益保護(hù)協(xié)議
- YS/T 394-2007鉭精礦
- GB/T 17193-1997電氣安裝用超重荷型剛性鋼導(dǎo)管
- ETF融資融券的應(yīng)用策略課件
- 東芝空調(diào)用戶使用手冊(cè)
- 全國(guó)卷高考標(biāo)準(zhǔn)語(yǔ)文答題卡作文紙3欄800字版
- DB32T 4284-2022 居民住宅二次供水工程技術(shù)規(guī)程
- 放射性物品道路運(yùn)輸申請(qǐng)表樣表
- 110kV變電站高壓試驗(yàn)報(bào)告完整版
- TSG Z7001-2004 特種設(shè)備檢驗(yàn)檢測(cè)機(jī)構(gòu)核準(zhǔn)規(guī)則
- 入學(xué)、幼兒園等健康衛(wèi)生教育洗手知識(shí)教育ppt課件
- JJF(鄂) 82-2021 全自動(dòng)混凝土抗?jié)B儀校準(zhǔn)規(guī)范(高清版)
評(píng)論
0/150
提交評(píng)論