相信大家平常都有這樣的經驗:頁面上有一個連結指向伺服器一個Word文件,當客戶端機器有安裝Office時,點擊連結將會呼叫Word開啟瀏覽;當客戶端機器沒有安裝Office時,點擊連結將會彈出儲存對話框。總結一下即如果瀏覽器認識文件類型,就會自動開啟;如果不認識,則會提示客戶儲存。可是有時候我們希望不管什麼類型文件,都不要打開,直接讓客戶端保存。要達到這個要求,對於保存在伺服器硬碟上的檔案就得利用ASPUpload元件的SendBinary方法來實現,而對於儲存在資料庫中的檔案則只須開啟記錄集,然後將二進位資料直接輸出到客戶端即可,不過要告訴瀏覽器檔案的MIME類型、檔案名稱和檔案大小。
1.伺服器端硬碟上的文件
<%
Dim Upload,FilePath
Set Upload = Server.CreateObject(Persits.Upload)
FilePath = Server.MapPath(.) & / & 2003529213019.txt
'SendBinary參數說明:
'參數一:檔案物理路徑
'參數二:是否將文件的MIME類型等資訊傳送給瀏覽器
'參數三:檔案類型,可以指定特定的MIME類型,但一般都可以使用application/octet-binary
'參數四:讓客戶端儲存檔案還是直接開啟。 True:儲存;False(預設):開啟
Upload.SendBinary FilePath,True,application/octet-binary,True
%>
2.伺服器端資料庫中的文件
<%
Dim objConn,objRs
Set objConn = Server.CreateObject(ADODB.Connection)
Set objRs = Server.CreateObject(ADODB.RecordSet)
objConn.open Driver={Microsoft Access Driver (*.mdb)};dbq= & Server.MapPath(db1.mdb)
objRs.open select * from t5 where id=2,objConn,1,3
Response.ContentType = application/octet-stream
Response.AddHeader Content-Disposition,attachment;filename= & objRs(filename)
Response.AddHeader Content-Length,CStr(objRs(size)) '此處必須用CStr轉換
Response.BinaryWrite objRs(file)
objRs.close
Set objRs = nothing
objConn.close
Set objConn = nothing
%>
此法要求保存檔案時需同時儲存檔案名稱及檔案大小!若未指定檔案名稱及大小,瀏覽器若認識該文件類型,將會自動開啟;若不認識,才會提示客戶儲存!