用ASP如何将ACCESS数据库中记录的OLE字段(文件)发送给客户端? ( 积分: 100 )

  • 主题发起人 主题发起人 芳泽
  • 开始时间 开始时间

芳泽

Unregistered / Unconfirmed
GUEST, unregistred user!
不使用组件,用ASP如何将ACCESS数据库中记录的OLE字段(文件)发送给客户端?初学ASP,向高手求源代码,谢谢了!
 
不使用组件,用ASP如何将ACCESS数据库中记录的OLE字段(文件)发送给客户端?初学ASP,向高手求源代码,谢谢了!
 
1) Request.BinaryRead()方法
  ● 使用Request.BinaryRead()方法可以获取提交的文件数据
  ● 语法
  VarReValue= Request.BinaryRead(number)
  变量VarReValue返回值保存从客户端读取到的二进制数据;
  参数number指明要从客户端读取的二进制数据量的大小。
  2) Response.BinaryWrite()方法
  ● 使用Response.BinaryWrite()方法可以从数据库中获取图片数据并显示到客户端的浏览器中。
  ● 语法
  Response.BinaryWrite data
  参数data是要写进客户端浏览器中的二进制数据包。

参考 http://www.kupage.com/webdesign/7/20031017/1651460000027pkxd20u.htm
原理类似
 
这个问题分两步:1、把数据从数据库取出放入变量;2、发送到客户端;
1、先说第一步。下面是d2005代码:
type
byte_buf=array of byte;
var
c:integer;
con: OleDbConnection;
scmd: OleDbCommand;
buf,:byte_buf;
reader:OleDbDataReader;

begin
...
con:=OleDbConnection.Create("...");
con.Open;
scmd:=OleDbCommand.Create('select OLEField from yourTable where ...',con);
reader:=scmd.ExecuteReader();
reader.Read;
c:=length(byte_buf(reader['OLEField']));
setlength(buf,c);
buf:=byte_buf(reader['file_obj']);
con.close;
...
end;

这样,数据库中的OLE数据就放入到buf中了!
 
楼上,楼主好像说ASP哦:)
 
2、发送到客户端

前面的代码已经把数据保存到buf中了,现在把它发送到客户端。
这里要考虑几个问题:数据到了客户端,是在浏览器中显示,还是作为文件下载呢?
如果是直接显示,那么还要考虑OLE对象的类型呢。
下面是示意代码:
...
Response.Clear;
Response.Buffer:= true;
Response.Charset:='utf-8';
[red]case OLE对象的类型 的类型 of
Excel:Response.ContentType:='application/ms-Excel';
word:Response.ContentType:='application/ms-Word';
...
end;
[/red]
if 作为文件下载 then
Response.AddHeader('Content-Disposition','attachment;filename=tmp.000')
else
Response.AddHeader('Content-Disposition','inline;filename=tmp.000');
Response.BinaryWrite(buf);
response.&
end;
...
说明,其中tmp.000,最好换成正确后缀的文件名。
以上代码是示意代码,但确是由实际代码删改而成,应该能帮助你解决问题。
 
还有,当是作为文件下载的时候,红色代码部分(即case部分)是多余的!
 
to yeskert1:
我要实现的是文件下载,麻烦你说具体点,最好用ASP,感激!
 
ContentDisposition是固定,指导浏览器怎样部署从服务器获得的内容。
attachment表示作为文件下载,客户端会提示保存对话框;filename也可以空,因为它提供的是建议/默认名字;
inline表示就地打开。
 
asp?
asp.net?
用什么根据开发?
 
<%
dim conn,strcon
strcon=&quot;DBQ=&quot;+server.mappath(&quot;imgtable.mdb&quot;)+&quot;;DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};&quot;
set conn=server.createobject(&quot;ADODB.CONNECTION&quot;)
conn.open strcon
set rs=server.CreateObject (&quot;adodb.recordset&quot;)
rid=request.form(&quot;id&quot;)
strsql=&quot;SELECT * FROM images WHERE id=&quot;&amp;rid
rs.open strsql,conn,1,3
filename=rs(&quot;name&quot;)
Dim GIFMark,binData
GIFMark = ChrB(&amp;H47) &amp;
ChrB(&amp;H49) &amp;
ChrB(&amp;H46)
binData = RS(&quot;img&quot;).GetChunk(204800)
Response.AddHeader &quot;Content-Disposition&quot;,&quot;attachment;
filename=&quot;&amp;filename&amp;&quot;&quot;
Response.BinaryWrite binData
rs.close
set rs=nothing
set conn=nothing
%>
 
谢谢二位!
 
多人接受答案了。
 
后退
顶部