在网页中显示数据库中的图片问题!!!(200分)

  • 主题发起人 主题发起人 prosky
  • 开始时间 开始时间
P

prosky

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库中的image字段存有*.tif or *.jpg格式的图片,如何从数据库中调出来显示
在网页中?网上看到的都是用asp解决的,但asp访问要密码的数据库的时候会在网页中
留下用户名和密码,即使用在网页上禁止显示原码的方法,也会有asp工具将asp代码从
网站里扒下来,有没有其他方法实现在ie中显示数据库中图片的?比如用delphi从数据
库中取出图片在通过cgi显示在网页中?不希望用生成临时图片文件的方法,也不希望在
用asp去解决,有没有其他方法?最好写出代码详细叙述。万分感谢!
 
Asp的安全性还行的,用ASP不可能在网页中留下用户名和密码。将asp从服务器上下载下来的可能性
和从服务器上找到你的数据库并下载的可能性一样大。
你还可以用sce10en加密你的ASP代码,别人下载下来目前也没听说有工具可以解得了。
如果服务器是你一人所有,也不用做什么程序再把数据传给cgi了,你可以做个程序动态地生成网页
了,这样多好。访问者还以为你的网站做了无数的htm页给他们看呢。
如果服务器是租用的空间,你没有任何机会放exe文件上去的,让你干,你还不把人家服务器上的所
有网站都down下来SeeSee?
还有,delphi读数据库的图片容易,可不通过临时文件你如何传出?以我对CGI和ASP的了解你这样做
很困难。
当然,你一定要这样做,我们可以讨论讨论…
你这样做,当有人访问你的CGI时,CGI带参数打开一个exe文件,这个exe文件读到数据后,再用post
的方法访问并传二进制图像数据给CGI,CGI再生成网页。
有个问题,如何CGI打开一个exe文件呢?我没有设置过服务器,不知可行不可行。如果可行这个方案
就能用。
写代码?不知道你的运行环境代码如何写?
还有一个方法,你得做个组件,用它来访问数据库,组件按装好后好像别人下载不了了。不过,这好像
是ASP的事了。其实ASP和CGI都一样,ASP还比CGI容易用些呢。
 
例子程序在Borland/Delphi5/Demos/Webserv
 
例子,从Delphi帮助修改来的。
代码:
<html>
<body>
  <img src="/webbin/project1.exe/GetImage">
</body>
</html>

[PROJECT1.DPR]
program Project1;

{$APPTYPE CONSOLE}

uses
  WebBroker,
  CGIApp,
  Unit1 in 'Unit1.pas' {WebModule1: TWebModule};

{$R *.RES}

begin
  Application.Initialize;
  Application.CreateForm(TWebModule1, WebModule1);
  Application.Run;
end.

[UNIT1.DFM]
object WebModule1: TWebModule1
  OldCreateOrder = False
  Actions = <
    item
      Default = True
      Name = 'GetImage'
      OnAction = WebModule1GetImageAction
    end>
  Left = 193
  Top = 198
  Height = 150
  Width = 215
  object Table1: TTable
    Active = True
    DatabaseName = 'DBDEMOS'
    TableName = 'animals.dbf'
    Left = 48
    Top = 16
    object Table1NAME: TStringField
      FieldName = 'NAME'
      Size = 10
    end
    object Table1SIZE: TSmallintField
      FieldName = 'SIZE'
    end
    object Table1WEIGHT: TSmallintField
      FieldName = 'WEIGHT'
    end
    object Table1AREA: TStringField
      FieldName = 'AREA'
    end
    object Table1BMP: TBlobField
      FieldName = 'BMP'
      BlobType = ftTypedBinary
      Size = 1
    end
  end
end

[UNIT1.PAS]
unit Unit1;

interface

uses
  SysUtils, Classes, HTTPApp, DB, DBTables, Graphics, Jpeg;

type
  TWebModule1 = class(TWebModule)
    Table1: TTable;
    Table1NAME: TStringField;
    Table1SIZE: TSmallintField;
    Table1WEIGHT: TSmallintField;
    Table1AREA: TStringField;
    Table1BMP: TBlobField;
    procedure WebModule1GetImageAction(Sender: TObject;
      Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  WebModule1: TWebModule1;

implementation

{$R *.DFM}

procedure TWebModule1.WebModule1GetImageAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
  Jpg: TJPEGImage;
  S: TMemoryStream;
  B: TBitmap;
begin
  Jpg := TJPEGImage.Create;
  try
    B := TBitmap.Create;
    try
      B.Assign(table1BMP);
      Jpg.Assign(B);
    finally
      B.Free
    end;
    S := TMemoryStream.Create;
    Jpg.SaveToStream(S);

    S.Position := 0;
    Response.ContentType := 'image/jpeg';
    Response.ContentStream := S;
    // do not free the stream because the response
    // object will handle that task.
  finally
    Jpg.Free;
  end;
end;

end.
 
sorry delphi,现在才给你加分,解答得很好,very thx。
 
后退
顶部