ASP中靈活使用Response屬性
發(fā)表時間:2024-01-10 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]ASP中巧用Response屬性 ---- 我在用ASP為某單位制作網(wǎng)頁時遇到這樣一個問題,單位以前的MIS系統(tǒng)中將 一些Word文件以字節(jié)流的形式保存在數(shù)據(jù)庫中,現(xiàn)在用戶要求我用ASP將這些Word文件數(shù)據(jù)從數(shù)據(jù)庫中取出并在網(wǎng)頁中顯示出來。開始我自然地想到在服務(wù)器上創(chuàng) 建臨時文件、然后在網(wǎng)頁中增...
ASP中巧用Response屬性
---- 我在用ASP為某單位制作網(wǎng)頁時遇到這樣一個問題,單位以前的MIS系統(tǒng)中將 一些Word文件以字節(jié)流的形式保存在數(shù)據(jù)庫中,現(xiàn)在用戶要求我用ASP將這些Word文件數(shù)據(jù)從數(shù)據(jù)庫中取出并在網(wǎng)頁中顯示出來。開始我自然地想到在服務(wù)器上創(chuàng) 建臨時文件、然后在網(wǎng)頁中增加一個指向這個臨時文件的鏈接,但這個方法將大 大增加服務(wù)器的負擔(dān)不說,而且在服務(wù)上如何保證特定客戶端所使用的臨時文件 不被其它客戶端使用的文件覆蓋,如何在文件傳送給用戶后將文件刪除,這些問 題在實際都難很好解決。那么有沒有更好的辦法呢?
---- 為此我仔細查看了一下ASP的參考書,發(fā)現(xiàn)Response對象有一個叫contentt ype的屬性,它定義服務(wù)器發(fā)送給客戶端內(nèi)容的MIME類型。MIME全稱Multipurpos e Internet Mail Extensions,即多功能Internet郵件擴展。我們知道,在網(wǎng)頁 編程中我們有時將超鏈接指向一個Word或Excel文件,當(dāng)用戶點擊這個鏈接時瀏覽 器會自動調(diào)用對應(yīng)方法將這個文件打開。之所以能做到這點就是因為用戶機器上 安裝office后會在瀏覽器中注冊對應(yīng)的MIME資源類型。比如說word文件的MIME類 型是Application/msword(前者是MIME類型,后者是MIME子類),Excel文件的M IME資源類型是Application/msexcel。事實上,凡是瀏覽器能處理的所有資源都 有對應(yīng)的MIME資源類型,比如說html文件的MIME類型是Text/html,JPG文件的MI ME類型是Image/JPG。在與服務(wù)器的交互中,瀏覽器就是根據(jù)所接受數(shù)據(jù)的MIME類 型來判斷要進行什么樣的處理,對html、JPG等文件瀏覽器直接將其打開,對Word、Excel等瀏覽器自身不能打開的文件則調(diào)用相應(yīng)方法打開。對沒有標(biāo)記MIME類 型的文件,瀏覽器則根據(jù)其擴展名和文件內(nèi)容猜測其類型。如果瀏覽器無法猜出
,則將它作為application/octet-stream。要了解各種文件的MIME類型,請在wi n98 我的電腦->查看->文件夾選項->文件類型 中查看。
---- 于是我靈機一動,想到在ASP中可以先將WORD數(shù)據(jù)以字節(jié)流方式取出,接著 將其conntenttype屬性標(biāo)記為Application/msword,再將它發(fā)送給客戶機,客戶 機收到這個資源后,根據(jù)其MIME類型,會自動調(diào)用客戶機上的Word(當(dāng)然,前提 是客戶機上裝了Word,否則會將其作為一個不能識別的資源,提示用戶保存起來,而不是打開它)將它打開。經(jīng)試驗效果很好,方法簡單且速度很快,而且在IE 5中瀏覽器使用內(nèi)嵌方式(類似于OLE方式)打開,效果更佳。以下是程序內(nèi)容。
---- 假設(shè)表名tab_word,表中有兩個字段,一個是整型,名id,用作Word數(shù)據(jù)的 唯一標(biāo)識,另一個Blob型,名worddata,里面存放Word數(shù)據(jù),F(xiàn)在要在頁面上顯 示id等于1的Word文件內(nèi)容, ASP程序如下:
< %
' conn - 已創(chuàng)建的數(shù)據(jù)庫連接
' rs -- 結(jié)果集
rs = conn.execute("select
worddata from tab_word where id = 1")
response.contenttype = "Application/msword"
response.writebinary(rs("worddata"))
'注意將結(jié)果集中的數(shù)據(jù)直接用writebinary發(fā)送出去,不要用變量
'接收這個數(shù)據(jù),否則系統(tǒng)會報錯
% >