跪求Delphi+Mysql上传、下载图片的方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跪求Delphi+Mysql上传、下载图片的方法?相关的知识,希望对你有一定的参考价值。

我使用的是DataSnap三层架构,在伺服器端使用的是TSQLDataSet控件,数据表涉及图片的字段类型为Blob,请问如何往数据库上传和下载(求详细步骤),谢谢大师赐教!!!

第7章 数据库处理实例

实例122 在数据库中存取图像

本实例演示如何在数据库中存取图像文件。

向窗体上添加一个TListBox组件、一个TImage组件和一个TTable组件,设计完成的主界面如图7-13所示。

图7-13 主界面

本系统中需要设计一个新的基于Paradox 7的数据库Image.db,图7-14为设计完成的Image.db数据库。

图7-14 设计完成的数据库

为了方便测试程序,Image.db数据库存储在实例程序所在的路径下。

设置TTable组件的TableName属性为Image.db,Active属性为True。

在程序运行初期,首先会判断Image.db数据库中是否存在记录,如果没有记录存在,那么就执行以下代码向Image.db数据库中添加“鸟.bmp”文件:

procedure TForm1.FormCreate(Sender: TObject);

var

mem:TMemoryStream;

begin

if Table1.Eof and Table1.Bof then

begin

with Table1 do

begin

Insert;

FieldByName(\'Name\').AsString:=\'鸟\';

mem:=TMemoryStream.Create();

mem.LoadFromFile(\'鸟.bmp\');

TBlobField(FieldByName(\'Data\')).LoadFromStream(mem);

Post;

end;

end;

end;

然后按照相同的方式顺序向Image.db数据库中添加“样品.wav”、“叶子.wav”和“荷花”图像文件。

最后通过下面的代码把Image.db数据库中存储的文件名字添加到窗体的TListBox组件中:

with Table1 do

begin

First;

while not Eof do

begin

ListBox1.Items.Add(FieldByName(\'Name\').AsString);

Next;

end;

end;

在程序运行过程中,如果用户在窗体的TListBox组件中选择了图像文件,程序会通过TTable组件的First方法把数据表中的第1条记录作为当前记录,然后通过一个循环来遍历数据库中的记录。如果某条记录中Name字段的内容和用户的选择相同,那么就把该记录中Data字段中的图像信息读取出来,并且把图像显示在窗体上的TImage组件上。代码如下:

procedure TForm1.ListBox1Click(Sender: TObject);

var

mem:TStream;

bmp:TBitmap;

begin

with Table1 do

begin

First;

while not Eof do

begin

if FieldByName(\'Name\').AsString=ListBox1.Items[ListBox1.ItemIndex] then

break;

Next;

end;

bmp:=TBitmap.Create;

mem:=CreateBlobStream(FieldByName(\'Data\'),bmRead);

mem.Position:=0;

bmp.LoadFromStream(mem);

self.Image1.Picture.Assign(bmp);

bmp.Free;

mem.Free;

end;

end;

程序代码如下:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, DB, DBTables,mmsystem, ExtCtrls;

type

TForm1 = class(TForm)

ListBox1: TListBox;

Table1: TTable;

Image1: TImage;

procedure FormCreate(Sender: TObject);

procedure ListBox1Click(Sender: TObject);

private

Private declarations

public

Public declarations

end;

var

Form1: TForm1;

implementation

$R *.dfm

procedure TForm1.FormCreate(Sender: TObject);

var

mem:TMemoryStream;

begin

if Table1.Eof and Table1.Bof then

begin

with Table1 do

begin

Insert;

FieldByName(\'Name\').AsString:=\'鸟\';

mem:=TMemoryStream.Create();

mem.LoadFromFile(\'鸟.bmp\');

TBlobField(FieldByName(\'Data\')).LoadFromStream(mem);

Post;

Insert;

FieldByName(\'Name\').AsString:=\'样品\';

mem:=TMemoryStream.Create();

mem.LoadFromFile(\'样品.bmp\');

TBlobField(FieldByName(\'Data\')).LoadFromStream(mem);

Post;

Insert;

FieldByName(\'Name\').AsString:=\'叶子\';

mem:=TMemoryStream.Create();

mem.LoadFromFile(\'叶子.bmp\');

TBlobField(FieldByName(\'Data\')).LoadFromStream(mem);

Post;

Insert;

FieldByName(\'Name\').AsString:=\'荷花\';

mem:=TMemoryStream.Create();

mem.LoadFromFile(\'荷花.bmp\');

TBlobField(FieldByName(\'Data\')).LoadFromStream(mem);

Post;

mem.Free;

end;

end;

with Table1 do

begin

First;

while not Eof do

begin

ListBox1.Items.Add(FieldByName(\'Name\').AsString);

Next;

end;

end;

end;

procedure TForm1.ListBox1Click(Sender: TObject);

var

mem:TStream;

bmp:TBitmap;

begin

with Table1 do

begin

First;

while not Eof do

begin

if FieldByName(\'Name\').AsString=ListBox1.Items[ListBox1.ItemIndex] then

break;

Next;

end;

bmp:=TBitmap.Create;

mem:=CreateBlobStream(FieldByName(\'Data\'),bmRead);

mem.Position:=0;

bmp.LoadFromStream(mem);

self.Image1.Picture.Assign(bmp);

bmp.Free;

mem.Free;

end;

end;

end.

保存文件,然后按F9键运行程序,程序运行的初始画面如图7-15所示。

在TListBox组件中选中一项后,就会显示相对应的图像文件,如图7-16所示。

图7-15 程序运行的初始画面 图7-16 程序运行结果
书上找的
参考技术A 在中间层写接口

以上是关于跪求Delphi+Mysql上传、下载图片的方法?的主要内容,如果未能解决你的问题,请参考以下文章

JSP UTF-8版UEditor,添加在本地项目提示 :”后台配置项返回格式出错,上传功能将不能正常使用!“,跪求

跪求delphi 中cxgrid控件的用法,越详细越好

delphi ftp上传下载

Delphi 7-如何将图片保存在数据库中

Delphi阿里云存储对象支持上传文件下载文件删除文件创建目录删除目录Bucket操作等

delphi 从 TWebbrowse组件中获取图片