如何在网页上显示数据库中的图片? ( 积分: 300 )

  • 主题发起人 主题发起人 东风在说
  • 开始时间 开始时间

东风在说

Unregistered / Unconfirmed
GUEST, unregistred user!
1、数据库中的图形显示网页上,一般要经过本地文件,这很不好!这个就不用说了!
2、通过修改Response.ContentType这个方法对于多个文件时是否可行?
3、我觉得把图片内容直接放在网页上应该是可行,但不知道这样做
总之,我想避免“转成本地文件”,希望大家提供一个较通用的方法!

如果谁能提供第三种方案的实现方法,那么我另给300分!
 
1、数据库中的图形显示网页上,一般要经过本地文件,这很不好!这个就不用说了!
2、通过修改Response.ContentType这个方法对于多个文件时是否可行?
3、我觉得把图片内容直接放在网页上应该是可行,但不知道这样做
总之,我想避免“转成本地文件”,希望大家提供一个较通用的方法!

如果谁能提供第三种方案的实现方法,那么我另给300分!
 
<%dim conn,rs,id
conn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("dbase.mdb")
id=replace(request("id"),"'","")
set rs=Server.CreateObject("adodb.recordset")
rs.Open "select * from FileInfo where id="&id,conn,1,1
if rs.eof and rs.bof then
Response.Write "没有找到该文件!"
else
if IsNull(rs("FileData")) then
Response.Write "文件为空或没有资料!"
else
Response.ContentType =rs("FileMIME")
Response.BinaryWrite rs("FileData")
end if
end if
rs.Close
set rs=nothing
%>
 
风铃夜思雨 的方法就是楼主所说的2,如果页面很多图片,比如想把delphi所得animals那个表显示在页面上,这个方法要来回跑多少趟?
 
如果把图形转成xml保存到页面上,然后在客户端通过javascript来获得……
不知道行不行?
 
to yeskert1:
1、怎么转成xml?
2、网页元素image的src能引用页面上的xml数据吗?javascript应该怎样写?
 
这个问题很有意思!我忍不住实验一下!
1、图片放到网页肯定没有问题,因为它可以转化成文本。代码如下:
uses ...,encdDecd,...;
...
...
procedure TForm1.Button1Click(Sender: TObject);
var stream1,stream2:TStringStream;
begin
//说明1:Image1里是一个bmp格式的图片,我要把它拷贝到image2里面去!
stream1:=TStringStream.Create('');
Image1.Picture.Bitmap.SaveToStream(stream1);
memo1.Lines.Text:=Encodestring(stream1.DataString);
stream1.Free;
//
stream2:=TStringStream.Create('');
stream2:=TStringStream.Create(decodestring(memo1.Lines.text));
Image2.Picture.Bitmap.LoadFromStream(stream2);
stream2.Free;
//说明2:上面,我把图片内容放到memo1里了,作为文本,它可以放在网页上!
end;
 
Encodestring/decodestring是一对base64编码/解码函数,delphi提供多对这样的函数!
javascript支持base64编码/解码!
 
yeskert1,谢谢你!
按照你的方法,感觉好像可以把图像放在网页上了!还没有来得及实验呢!
关键是,图像放在页面理了,怎样显示呢?网页元素image的src能引用页面上的xml数据
吗?javascript应该怎样写?或者除了设置src有无其它方法操作图像内容?
这个解决才是关键的,不然的话,图像放在网页上有什么用?
 
网页元素当然不能src直接引用xml数据了。需要通过javascript来给xml格式的图片解码后才能赋给image元素显示。刚才yeskert1说了,通过base64编码/解码来实现,javascript进行base64解码的代码网上可以找到,不需要自己写。

不过这里提出一点自己的看法,不知道“东风在说”的图片是否都是数据库中保存的,如果要进行管理的话,不知道怎么管理xml文件,我的意思是,如果每个图片需要的时候再转换成xml来提供给用户访问,这个编码工作量是否太大了?因为每个图片客户访问的时候都要编码一次。不要告诉我你一次编码重复使用,因为你管理的是数据库,除非数据库变动后,你使用一套机制保证xml编码的图片和数据库的变动保持同步。

其实我觉得“2、通过修改Response.ContentType这个方法对于多个文件时是否可行?
”这种方法更合理,即使每个图片传输的请求都设置一下ContentType也没有什么不妥,我们访问一个网页的时候,里面的文本、图片都是独立设置ContentType传到我们机器的,用这种方法接收服务器数据库中的图片无需额外编码,效率应该更高。
 
to crazycock:
之前没有考虑过,现在,我觉得直接存储图片编码后的文本也行!
第二种方法我在别的地方用过,不适合我现在的情况!
crazycock,你认为image除了设置src外还有其它方法控制其内容吗?或者,src能指定
本网页的某个变量吗?我怎样才能显示它呢?


yeskert1,在吗?有办法吗?
 
src指定为网页内某个变量倒是没有试过,不过觉得行不通。不知道你提到前面说的第二种方法不适用怎么个不适用法?能否详细些?
 
to crazycock:
为什么第2个方法为什么不行呢?实际情况说来比较罗嗦!简单的说,这里没有response
对象!例如,我把数据库中数据(图像和其它)用TWebBrowser显示,是不是?

刚才试了yeskert1老兄的代码,问题是没有,就是编码确实慢,看来真的直接存储编码后的
内容了!但,到底第三个方案是否可行?
 
谢谢各位!先把分结了!又开了一个300分的帖子,讨论网页上如何显示的问题:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3151774
希望这600分能换来一个满意的答案!
 
比较难!
 
后退
顶部