CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  ASP

ASP中显示数据库图象字段的问题?

楼主ynduanlian(进一步海阔天高,退一步粉身碎骨)2000-11-22 11:32:00 在 Web 开发 / ASP 提问

我将JPG图象文件以OLE对象字段的形式(非链接)存入ACCESS97数据库中,然后编写下面的代码,为何却不能在浏览器中正常显示该JPG文件?  
  <%@   Language=VBScript   %>  
  <%  
  Private   Sub   Disp_photo()  
    Dim   P  
    Dim   L  
    L=1024     '以1K为单位向Client端写数据  
    Response.ContentType="Image/JPEG"  
    do  
      P=rs("picture").Getchunk(L)  
      Response.BinaryWrite   P  
      if   (LenB(P)<   L)   then   exit   do  
    loop  
  End   Sub  
  %>  
   
  <OBJECT   RUNAT=server   PROGID=ADODB.Connection   id=Conn>   </OBJECT>  
  <OBJECT   RUNAT=server   PROGID=ADODB.Recordset   id=rs>   </OBJECT>  
   
  <%  
    Response.Buffer=true  
    strSQL="select   product,   picture   from   Product"  
    Conn.Open   "yuegang"  
    rs.Open   "Product",Conn  
    if   not   (rs.eof   and   rs.bof)   then  
      Disp_photo  
    End   if    
  %>  
  问题点数:120、回复次数:1Top

1 楼edyang(化石)回复于 2000-11-22 18:28:00 得分 120

你需要把   OLE   对象的   OLE   头部信息去掉才可以。下面是   MSDN   上的一篇文章,可以解决你的问题:  
   
  HOWTO:   Retrieving   Bitmap   from   Access   and   Displaying   In   Web   Page  
  ID:   Q175261    
   
     
   
  --------------------------------------------------------------------------------  
  The   information   in   this   article   applies   to:  
   
  Active   Server   Pages    
  Microsoft   Visual   Basic   Professional   and   Enterprise   Editions   for   Windows,   versions   5.0,   6.0  
   
  --------------------------------------------------------------------------------  
   
   
  SUMMARY  
  This   article   shows   by   example   how   to   extract   the   bitmap   photos   in   the   Microsoft   Access   97   Northwind.mdb   database,   and   view   them   from   a   Web   browser   using   Active   Server   Pages   (ASP).   In   order   to   accomplish   this   task,   an   ActiveX   DLL   must   be   created   that   strips   the   Access   and   OLE   headers   from   the   field.   This   article   shows   how   to   create   this   ActiveX   DLL,   and   how   to   implement   it.    
   
   
   
  MORE   INFORMATION  
  WARNING:   ANY   USE   BY   YOU   OF   THE   CODE   PROVIDED   IN   THIS   ARTICLE   IS   AT   YOUR   OWN   RISK.   Microsoft   provides   this   code   "as   is"   without   warranty   of   any   kind,   either   express   or   implied,   including   but   not   limited   to   the   implied   warranties   of   merchantability   and/or   fitness   for   a   particular   purpose.    
   
  This   article   demonstrates   how   to   use   Visual   Basic   to   retrieve   a   bitmap   stored   in   an   OLE   Object   field.   Because   the   definition   of   OLE   object   storage   is   not   documented,   the   following   code   searches   the   object's   OLE   header   for   characters   consistent   with   the   start   of   the   graphic.   This   method   may   not   work   in   all   circumstances.    
   
  Be   aware   that   Internet   Explorer   3.0   is   unable   to   display   true   color   bitmaps.   For   this   reason,   the   bitmaps   stored   in   the   Access   database   should   be   no   higher   than   256   colors.    
   
  Step-by-Step   Example   to   Extract   the   Photos  
   
   
  Create   a   new   project   in   Visual   Basic   and   make   the   project   an   ActiveX   DLL.    
   
   
  Add   a   reference   to   ActiveX   Data   Objects   (ADO)   by   clicking   the   Project   menu   and   selecting   References.   Select   "Microsoft   OLE   DB   ActiveX   Data   Objects   1.0   Library"   and   click   OK.    
   
   
  Add   a   new   module   to   the   project   by   selecting   the   Project   menu   and   clicking   Add   Module.   Select   Module   and   click   Open.    
   
   
  Place   the   following   code   in   the   (general)   (declarations)   section   of   MODULE1.BAS:  
   
   
              '   Enter   the   following   Declare   statement   as   one   single   line:  
              Public   Declare   Sub   CopyMemory   Lib   "kernel32"   Alias   "RtlMoveMemory"  
                (lpvDest   As   Any,   lpvSource   As   Any,   ByVal   cbCopy   As   Long)  
   
              Type   PT  
                  Width   As   Integer  
                  Height   As   Integer  
              End   Type  
   
              Type   OBJECTHEADER  
                  Signature   As   Integer  
                  HeaderSize   As   Integer  
                  ObjectType   As   Long  
                  NameLen   As   Integer  
                  ClassLen   As   Integer  
                  NameOffset   As   Integer  
                  ClassOFfset   As   Integer  
                  ObjectSize   As   PT  
                  OleInfo   As   String   *   256  
              End   Type    
   
   
   
  Place   the   following   code   in   the   (general)   (declarations)   section   of   CLASS1.CLS:  
   
   
                  Function   DisplayBitmap(ByVal   OleField   As   Variant)  
                  Dim   Arr()   As   Byte  
                  Dim   ObjHeader   As   OBJECTHEADER  
                  Dim   Buffer   As   String  
                  Dim   ObjectOffset   As   Long  
                  Dim   BitmapOffset   As   Long  
                  Dim   BitmapHeaderOffset   As   Integer  
                  Dim   ArrBmp()   As   Byte  
                  Dim   i   As   Long  
   
                  'Resize   the   array,   then   fill   it   with  
                  'the   entire   contents   of   the   field  
                  ReDim   Arr(OleField.ActualSize)  
                  Arr()   =   OleField.GetChunk(OleField.ActualSize)  
   
                  'Copy   the   first   19   bytes   into   a   variable  
                  'of   the   OBJECTHEADER   user   defined   type.  
                  CopyMemory   ObjHeader,   Arr(0),   19  
   
                  'Determine   where   the   Access   Header   ends.  
                  ObjectOffset   =   ObjHeader.HeaderSize   +   1  
   
                  'Grab   enough   bytes   after   the   OLE   header   to   get   the   bitmap   header.  
                  Buffer   =   ""  
                  For   i   =   ObjectOffset   To   ObjectOffset   +   512  
                          Buffer   =   Buffer   &   Chr(Arr(i))  
                  Next   i  
   
                  'Make   sure   the   class   of   the   object   is   a   Paint   Brush   object  
                  If   Mid(Buffer,   12,   6)   =   "PBrush"   Then  
                          BitmapHeaderOffset   =   InStr(Buffer,   "BM")  
                          If   BitmapHeaderOffset   >   0   Then  
   
                                  'Calculate   the   beginning   of   the   bitmap  
                                  BitmapOffset   =   ObjectOffset   +   BitmapHeaderOffset   -   1  
   
                                  'Move   the   bitmap   into   its   own   array  
                                  ReDim   ArrBmp(UBound(Arr)   -   BitmapOffset)  
                                  CopyMemory   ArrBmp(0),   Arr(BitmapOffset),   UBound(Arr)   -  
                                    BitmapOffset   +   1  
   
                                  'Return   the   bitmap  
                                  DisplayBitmap   =   ArrBmp  
                          End   If  
                  End   If  
              End   Function    
   
   
   
  Rename   the   Project   by   selecting   the   Project   menu,   and   clicking   on   "Project1   Properties"   and   type   your   new   name   in   the   "Project   Name"   field.   This   example   assumes   that   you   named   the   project   "MyProject"   and   will   refer   to   that   name   in   future   steps.    
   
   
  Make   the   project   Apartment   Model   Threaded   by   selecting   the   "Unattended   Execution"   check   box.   Click   OK.    
   
   
  Rename   the   Class   in   the   Property   Pane.   This   example   assumes   that   you   named   the   class   "MyClass"   and   refers   to   that   name   in   future   steps.    
   
   
  Compile   the   DLL   by   clicking   the   File   menu   and   selecting   "Make   MyProject.dll."    
   
   
  Create   an   ASP   page   named   "bitmap.asp"   that   contains   the   following   code:  
   
   
              <%@   LANGUAGE="VBSCRIPT"   %>  
              <%  
              '       You   need   to   set   up   a   System   DSN   named   'NWind'   that   points   to  
              '       the   Northwind.mdb   database  
              Set   DataConn   =   Server.CreateObject("ADODB.Connection")  
              DataConn.Open   "DSN=NWind",   "admin",   ""  
              Set   cmdTemp   =   Server.CreateObject("ADODB.Command")  
              Set   RS   =   Server.CreateObject("ADODB.Recordset")  
              cmdTemp.CommandText   =   "SELECT   Photo   FROM   Employees  
                  WHERE   EmployeeID   =   1"  
              cmdTemp.CommandType   =   1  
              Set   cmdTemp.ActiveConnection   =   DataConn  
              RS.Open   cmdTemp,   ,   0,   1  
              Response.ContentType   =   "image/bmp"  
              Set   Bitmap   =   Server.CreateObject("MyProject.MyClass")  
              Response.BinaryWrite   Bitmap.DisplayBitmap(RS("Photo"))  
              RS.Close  
              %>    
   
   
   
  Create   an   HTML   page   named   "BitmapTest.htm"   that   contains   the   following   code:  
   
   
              <HTML>  
              <HEAD>  
              <TITLE>Bitmap   Test</TITLE>  
              </HEAD>  
              <BODY>  
              <HR>  
              <img   src="Bitmap.asp">  
              <HR>  
              </BODY>  
              </HTML>    
   
   
   
   
   
   
  REFERENCES  
  For   additional   information,   please   see   the   following   article   in   the   Microsoft   Knowledge   Base:    
   
   
  Q173308   HOWTO:   Displaying   Images   Stored   in   a   BLOB   Field    
   
  For   the   latest   Knowledge   Base   artices   and   other   support   information   on   Visual   InterDev   and   Active   Server   Pages,   see   the   following   page   on   the   Microsoft   Technical   Support   site:    
   
  http://support.microsoft.com/support/vinterdev/  
   
   
   
  Additional   query   words:    
   
   
  Keywords                     :   kbsample   kbAccess   kbADO   kbASP   kbCOMt   kbVBp   kbGrpASP   kbiis500    
  Version                       :   WINDOWS:5.0,6.0;   winnt:  
  Platform                     :   WINDOWS   winnt    
  Issue   type                 :   kbhowto    
     
   
   
  Last   Reviewed:   October   12,   1999  
  &copy;   1999   Microsoft   Corporation.   All   rights   reserved.   Terms   of   Use.  
     
   
   
   
  --------------------------------------------------------------------------------  
  Send   feedback   to   MSDN.Look   here   for   MSDN   Online   resources.   Top

相关问题

  • asp怎样把一个图象存到sql server 数据库中(已经存在image字段)
  • 如何使用ASP给ORACLE数据库的blob字段插入图象文件同时如何通过ASP把图象调出显示在网页上?
  • 怎样处理数据库中的图象字段
  • 如何判断数据库中的图象字段为空?
  • 怎样将一个图象文件加载到数据库的Image字段上?
  • 怎样将数据库中的图象字段放入WORD中!!!(在线等待)
  • 救命啊!asp读oracle数据库blob字段内容
  • asp如何查看数据库中表的字段的大小?
  • asp查询Access数据库字段出问题
  • ASP中SQL数据库LONG TEXT字段输出问题

关键词

得分解答快速导航

  • 帖主:ynduanlian
  • edyang

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo