如何從ACCESS數據庫中讀取images 1。ACCESS和FoxPro數據庫中的圖形格式 當瀏覽器遇到一個<IMG>標志時,它會根據你設定的src屬性來下載文件。 這可能是一個圖形文件或則是一個ASP頁面。 如果是一個返回gif二進制的ASP頁面 瀏覽器需要知道返回的是什么格式的圖形文件 因為這個原因,就需要指定content type,為image/gif,image/bmp image/jpeg或則其他什么的。 Response.contentType = "image/gif" 但這會導致另外一個問題,那就是我們只能夠顯示gif格式的圖象, 或則說保存在數據庫中的東西只能夠是gif格式的了。 但是一些數據庫是使用gif格式保存的,但是另外一些則是使用 jpeg格式保存的,甚至其他是采用OLE方式來保存圖形的。 所以我們必須根據圖形的格式來設置response的content type.
注意的是你也可以從一個文件中新建一個位圖對象,但使用這樣 的方式保存在數據庫中的圖形格式是瀏覽器不能夠識別的。 當你往數據庫中保存圖象時,你應該知道你需要使用什么格式來保存 你可以把文件中的每一個字節保存下來,或則通過ACCESS/Foxpro的把圖形保存 為一個OLE格式。 你使用什么格式保存圖象決定了你在ASP中用什么格式來讀出圖形來。 具體來說,如果你在ACCESS/FoxPro中將圖形保存為bmp,gif,jpeg( 這個必須要使用到ACCESS/FoxPro的OLE對象,即使用ACCESS的插入對象 對話框來完成),這是當你使用 image/bmp時瀏覽器是不能夠解釋的。
現在假設在數據庫中保存的是你所想要的圖形格式 (GIF, JPEG, BMP, TIFF, 等)現在來看看要怎么把它們從 數據庫中讀出來。
在ACCESS中使用了兩個關鍵的技術來保存圖形 1。使用了bmp格式 2。78個字節的文件頭
<% response.Expires = 0 response.Buffer = True response.Clear response.contentType = "image/bmp" %> 接著你要干的就是去掉那78個字節的OLE對象的文件頭。 <% Const OLEHEADERSIZE = 78 nFieldSize = rs("photo").ActualSize oleHeader = rs("photo").GetChunk(OLEHEADERSIZE) imageBytes = rs("photo").GetChunk(nFieldSize - OLEHEADERSIZE) Response.BinaryWrite imageBytes %>
現在舉一個例子: 如果你要得到一個職工的信息,這段信息包括一個介紹和他的圖象。 并且要同時顯示文字和圖形。 代碼如下:(其中的theImg是一個代理頁面) theImg.asp <% response.Expires = 0 response.Buffer = True response.Clear response.contentType = Session("ImageType") response.BinaryWrite Session("ImageBytes") Session("ImageType") = "" Session("ImageBytes") = "" response.End %>
Function SetImageForDisplay(field, contentType) OLEHEADERSIZE = 78 contentType = LCase(contentType) select case contentType case "gif", "jpeg", "bmp" contentType = "image/" & contentType bytes = field.value case "ole" contentType = "image/bmp" nFieldSize = field.ActualSize oleHeader = field.GetChunk(OLEHEADERSIZE) bytes = field.GetChunk(nFieldSize - OLEHEADERSIZE) end select Session("imageBytes") = bytes Session("imageType") = contentType End Function '注意的是,程序中只使用了4中格式:gif, jpeg, bmp , ole .
<% sql = "select * from Employees" Set oRS = Server.CreateObject("ADODB.Recordset") oRS.CursorLocation = 3 oRS.Open sql, "DSN=NW" SetImageForDisplay oRS("photo"), "ole" Set oRS.ActiveConnection = Nothing %>
要顯示圖象的話,只需要在另外一個asp中,假設為getEmpInfo.asp中 <img src="theImg.asp"</img> 但這還有一個問題,因為對每個職工的圖形都使用了同一個"theImg.asp" 文件,應該再小小修改一下: <img src="theImg.asp?temp=<%= Request.Form("empLastName")%>"</img>
最后再說一點,如何顯示多幅圖象呢? 也就是說如果數據庫中有多個字段都保存了圖形,怎么辦? 其實解決辦法很簡單,只要給SetImageForDisplay多加一個參數 就是用來保存圖形的一個session變量。 例如: SetImageForDisplay oRS1("photo"), "ole", "empPhoto" SetImageForDisplay oRS2("logo"), "gif", "compLogo"
<img src="theImg2.asp?varName=empPhoto&temp=<%= Request.Form("empLastName")%>"> <img src="theImg2.asp?varName=compLogo&temp=<%= Request.Form("imgCode")%>">
使用這個方法能夠完成下面的功能: 1。能夠從數據庫中取出圖形字段。(你唯一需要知道的是數據庫中的圖形是什么格式 bmp?gif?jpeg?ole?) 2.采用session變量 來保存圖形的字節數和content type asp需要這些信息來聯結到<IMG>中的屬性 3。只要把theImg放到你想顯示圖形的地方,就能夠顯示圖象了。
|