蔡伯峰
(泰州職業(yè)技術(shù)學(xué)院,江蘇 泰州 225300)
在Web應(yīng)用系統(tǒng)開(kāi)發(fā)中,經(jīng)常須要上傳文件保存到服務(wù)器上,但ASP內(nèi)置對(duì)象和內(nèi)置組件中并沒(méi)有提供很方便的方法處理文件的上傳,即使能通過(guò)編程實(shí)現(xiàn),也是繁瑣、耗時(shí)的,Web系統(tǒng)開(kāi)發(fā)者往往難以掌握。為此,第三方公司開(kāi)發(fā)了一些上傳組件用于處理文件上傳,其中功能強(qiáng)大又使用方便的是ASPUpLoad組件。它除了可上傳文件并將其直接以文件形式保存到服務(wù)器磁盤(pán)上外,更能保存到內(nèi)存中,并進(jìn)而保存到數(shù)據(jù)庫(kù)中,極大地方便了系統(tǒng)的移植和管理維護(hù)以及代碼編寫(xiě)。通過(guò)在頂崗實(shí)習(xí)平臺(tái)系統(tǒng)開(kāi)發(fā)中的反復(fù)探索和實(shí)踐,筆者總結(jié)了一套使用ASPUpLoad組件的行之有效的上傳保存并下載的方法,現(xiàn)介紹于此。
ASPUpLoad組件須要注冊(cè)后才能使用,直接在命令行輸入regsvr32aspupload.dll命令并按回車(chē)即可。注冊(cè)成功后通過(guò)SetUpload=Server.CreateObject("Persits.Upload")調(diào)用。
Save(OptionalPath):將文件保存到磁盤(pán)。當(dāng)省略Path參數(shù)時(shí)保存到內(nèi)存,但可通過(guò)File.Binary存?。⊿etFile=Upload.Files("file1")),或通過(guò)File.SaveAs保存到磁盤(pán)。
SetMaxSize(MaxSize,Optional?Reject):指定單個(gè)文件的限定大?。˙ytes)。參數(shù)Reject指定過(guò)大的文件是否會(huì)拒絕(True的時(shí)候)或截?。‵alse或省略的時(shí)候)。
SendBinary(Path):用作文件下載。將指定的文件發(fā)送給瀏覽器。
CreateDirectory(Path,OptionalIgnoreAlreadyExists):創(chuàng)建目錄。
CreateFile(Path):創(chuàng)建一個(gè)空文件。
FileExists(Path):檢測(cè)文件是否存在。
OpenFile(Path):建立一個(gè)File實(shí)例,它指向指定的文件。
CopyFile(FromPath,ToPath,OptionalOverwrite):復(fù)制文件。
DeleteFile(Path):刪除文件。
RemoveDirectory(Path):刪除目錄。如果目錄包含文件或子目錄,會(huì)報(bào)錯(cuò)。
FromDatabase(Connect,SQL,Path):使用ODBC從數(shù)據(jù)庫(kù)表中輸出image字段到磁盤(pán)。
FromRecordset(RecorsetValue,Path):使用Recordset對(duì)象從數(shù)據(jù)庫(kù)表中輸出image字段到磁盤(pán)。
Files:集合。它包含有各個(gè)上傳文件的引用。
Form:集合。它包括所有非文件域的表單域的引用。
Directory(Path):集合。它包括指定目錄的所有子目錄和文件的引用,Path?可以包括通配符*和?。
TotalBytes:上傳的總字節(jié)數(shù)。只能在成功調(diào)用Save方法后訪(fǎng)問(wèn)該屬性。
TotalSeconds:上傳持續(xù)的總時(shí)間。只能在成功調(diào)用Save方法后訪(fǎng)問(wèn)該屬性。
OverWriteFiles:默認(rèn)為T(mén)rue。如果設(shè)置為False,那么當(dāng)文件名已經(jīng)存在時(shí),AspUpload會(huì)在原文件名后附加“(1)”、“(2)”形式的字符,如aaa.jpg、aaa(1).jpg、aaa(2).jpg。
IgnoreNoPost:值為Boolean型。當(dāng)Save方法被腳本直接調(diào)用,而不是通過(guò)表單提交時(shí),可以避免出現(xiàn)“WrongContent-Type”錯(cuò)誤。
ProgressID:上傳進(jìn)度條所用的,用來(lái)區(qū)分上傳進(jìn)程。
在頂崗實(shí)習(xí)平臺(tái)中,須要上傳若干文件。假如某學(xué)校某屆實(shí)習(xí)學(xué)生為3000人,在實(shí)習(xí)總結(jié)報(bào)告或論文撰寫(xiě)期間,實(shí)習(xí)學(xué)生與校內(nèi)聯(lián)系老師之間要相互傳遞初稿、二稿、終稿,有時(shí)還有三稿等,如果將這些文件全部保存到服務(wù)器,那么將會(huì)有一萬(wàn)個(gè)左右的文件。如果再加上開(kāi)題報(bào)告、平時(shí)學(xué)生與聯(lián)系老師交流時(shí)上傳的文件、其他管理文件等,其數(shù)目將相當(dāng)驚人,不便于管理維護(hù)、移植和長(zhǎng)久保存。為此,可借助于SQL Server數(shù)據(jù)庫(kù)的強(qiáng)大存儲(chǔ)能力和image字段,直接將每次上傳的文件保存到數(shù)據(jù)庫(kù)中。圖1和圖2分別是學(xué)生論文報(bào)告的提交界面和數(shù)據(jù)庫(kù)表結(jié)構(gòu)。上傳時(shí)的關(guān)鍵代碼如下:
圖1 論文報(bào)告提交界面
圖2 “論文報(bào)告”表結(jié)構(gòu)
由于文件上傳后保存到數(shù)據(jù)庫(kù)中,因此在查看或下載該文件時(shí),須要先顯示出文件名,當(dāng)用戶(hù)點(diǎn)擊文件名鏈接時(shí)彈出下載對(duì)話(huà)框提示進(jìn)一步的操作。顯示文件名鏈接的關(guān)鍵代碼如下:
使用ASPUpLoad組件實(shí)現(xiàn)文件上傳功能,既方便又實(shí)用。通過(guò)在頂崗實(shí)習(xí)平臺(tái)系統(tǒng)開(kāi)發(fā)中的實(shí)際運(yùn)用表明,使用ASPUpLoad不僅減少了文件上傳代碼編寫(xiě)的工作量,而且通過(guò)直接將文件保存到數(shù)據(jù)庫(kù)中,極大地減少了系統(tǒng)中的文件數(shù)量,方便了系統(tǒng)的移植和維護(hù)管理,只要SQLServer數(shù)據(jù)庫(kù)的安全性得以保證,所有上傳的文件就完好無(wú)損。除此以外,ASPUpLoad組件還有多種功能,如創(chuàng)建刪除目錄、文件,將文件發(fā)送給瀏覽器,限制文件上傳大小,是否允許反復(fù)上傳等。
[1]馬增友,姚瑩,郭瑋莉,孔維.ASP 網(wǎng)站設(shè)計(jì)與開(kāi)發(fā)技能實(shí)訓(xùn)教程[M].北京:科學(xué)出版社,2010.
[2]鄒于豐,梁霄波,秦永俊.基于A(yíng)SP 的文件上傳系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)時(shí)代, 2009,(12):33-35.
[3]賈穎,肖曉飛.基于A(yíng)SP 的教學(xué)網(wǎng)站文件上傳策略研究[J].計(jì)算機(jī)教育,2008,(2):100-102.