web應(yīng)用中文件的存放方式_第1頁(yè)
web應(yīng)用中文件的存放方式_第2頁(yè)
web應(yīng)用中文件的存放方式_第3頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論