<%set  conn1=  server.CreateObject("adodb.connection")  
conn1.open="Provider=OraOLEDB.Oracle.1;Persist  Security  Info=True;Password=fzepolice;User  ID=fzepolice;Data  Source=106db;"  
response.buffer=true    
formsize=request.totalbytes    
formdata=request.binaryread(formsize)    
bncrlf=chrB(13)  &  chrB(10)    
divider=leftB(formdata,clng(instrb(formdata,bncrlf))-1)    
datastart=instrb(formdata,bncrlf  &  bncrlf)+4    
dataend=instrb(datastart+1,formdata,divider)-datastart    
mydata=midb(formdata,datastart,dataend)    
Set  OraSession=CreateObject("OracleInProcServer.XOraSession")    
Set  OraDatabase=OraSession.DbOpenDatabase("106DB","fzepolice/fzepolice",0)    
Set  rec=OraDatabase.CreateDynaset("select  *  from  EPPHOTO  order  by  OID  desc",0)    
Set  rs=OraDatabase.CreateDynaset("select    EPPHOTO_S.NEXTVAL  as  OID  FROM  DUAL",0)    
 
if  not  rs.eof  then  
OID=rs("OID")  
end  if  
 
imgname=cdbl(OID)&".jpg"  
sql="INSERT  INTO  EPPHOTO(OID,NAME,PHOTO,IMPORTDATE)  VALUES("&OID&",'"&imgname&"',EMPTY_BLOB(),TO_DATE('"&now()&"','yyyy-mm-dd  hh24:mi:ss'))"  
conn1.execute  sql  
Set  OraSession=CreateObject("OracleInProcServer.XOraSession")    
Set  OraDatabase=OraSession.DbOpenDatabase("106DB","fzepolice/fzepolice",0)    
Set  rec2=OraDatabase.CreateDynaset("select  *  from  EPPHOTO  where  OID="&OID&"",0)    
 
if  not  rec2.eof    then  
rec2("PHOTO").appendchunk  mydata      
rec2.update  
end  if  
rec2.close    
set  rec2=nothing     
%>    
<script  language="javascript">  
alert('图片上传完成!')  
history.back();  
</script>  
能传入数据,但是图片不显示?请高人指教下?  

解决方案 »

  1.   

    你这个帖子应该发在asp区,因为怎么显示和你的oracle没有太多的关系。主要是ADO来做的,一般有两种方法,一种是用ADO.Stream来实现(静态实现,访问性能高,占用硬盘缓冲空间),就是用ADO.Stream的save方法写到服务器硬盘中让客户端访问;一种是用ADO.Field对象(动态实现,访问性能差,每张都要读取数据库),单独写一个只显示图片的asp页面(不要妄想写一个包含html和image混合的asp,这是严重违反HTTP协议规则的!!),在这个asp页面中将response.contenttype = "image/jpeg"(或"image/gif"),这句话必须写在所有页面输出之前,否则会报错,然后用ADO.Field对象的GetChunk方法将二进制字节response.write到asp页面。希望对你有帮助。
      

  2.   

    我只懂C++,所以
    根据参考N多的技术文档后,我写了如下的代码实现ORACLE中图片上传的功能,希望很抛砖引玉得到更好的解决问题的办法!也请大家多多支持!
    要求要有ADO2.5以上的版本的支持。set conn = server.CreateObject("adodb.connection")
    conn.ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=myDB;User Id=user;Password=******"
    conn.Open
    'response.Write "connection is ok"'可以测试一下有没有连接成功
    'response.Endset rs = server.CreateObject("adodb.recordset")
    sql = "SELECT EPPHOTO_S.NEXTVAL AS OID FROM DUAL" '使用序列得到一个新记录的OID
    rs.Open sql, conn '执行SQL语句
    'response.Write sql
    dim newOID 
    newOID = 0
    if NOT rs.EOF then
       newOID = rs("OID")
    end if

    if clng(newOID) > 0 then  filename =  newOID&".jpg"
      sql = "INSERT INTO EPPHOTO(OID, NAME, PHOTO, IMPORTDATE)    
             VALUES  "&newOID&", '"&filename&"',EMPTY_BLOB(),SYSDATE)"
      'response.Write sql '测试生成的SQL语句是否正确
      conn.Execute sql, NULL, adCmdText DIM streamObj
     set streamObj = server.CreateObject("adodb.Stream")
     streamObj.Type = 1
     streamObj.Mode = 3
     streamObj.Open
     streamObj.LoadFromFile("C:\Documents and Settings\Administrator\My Documents\My Pictures\mv1.jpg")
     DIM streamData
     DIM  streamLen
     streamData = streamObj.Read
     streamLen  = streamObj.Size
     streamObj.Close
     set streamObj = nothing

     '再次从数据库中把这条记录找出来,UPDATE一下对应的BLOB的值
     sql = "SELECT PHOTO FROM EPPHOTO WHERE OID = "&newOID
     set agrs = server.CreateObject("adodb.recordset")
     agrs.Open sql, conn, 3, 2
     if not agrs.EOF then
        agrs.Update "PHOTO", streamData
      end if 
     agrs.Close
    end if 测试可以上传图片到ORACLE的BLOB字段
    下载部份略!