W
wbo
Unregistered / Unconfirmed
GUEST, unregistred user!
使用临时的ClientDataSet来传输文件,方便,安全,不留垃圾,文件大小只受内存限制。
如果使用数据库中的一个表来传输也可以,只不过需要经常pack,否则会留下大量垃圾。
在远程数据模块上添加ClientDataSet1,和DataSetProvider1,
客户机上添加相应的ClientDataSet2,程序大致如下:
一.服务器部分:
1.在数据模块建立时
With ClientDataSet1do
begin
With FieldDefs.AddFieldDefdo
begin
DataType := ftString;
Size := 100;
Name := 'f_name';
end;
With FieldDefs.AddFieldDefdo
begin
DataType := ftBlob;
Name := 'f_cont';
end;
With IndexDefs.AddIndexDefdo
begin
Fields := 'f_name';
Name := 'idx';
end;
CreateDataSet;
end;
2.”Add to Inteface...“ 添加接口过程
//up_or_down=0 清除临时数据
// =1 文件上传
// =2 文件下传
procedure Txxxxx.trans_files(up_or_down: integer);
var fn: string;
begin
with ClientDataSet1do
begin
case up_or_down of
0: EmptyDataSet;
1: begin
first;
while not eofdo
begin
fn:=yourdir+FieldByName('f_name').AsString;
(FieldByName('f_cont') as TBlobField).SaveToFile(fn);
next;
end;
end;
2: begin
把文件写入ClientDataSet1中;
end;
else
begin
根据自己的定义,作点其它事情
end;
end;
end;
end;
二.客户机部分:
1.上传
with ClientDataSet2do
begin
把文件写入ClientDataSet2中;
ApplyUpdates(0);
DCOMConnection1.AppServer.trans_files(1);
end;
2.下传
with ClientDataSet2do
begin
Close;
DCOMConnection1.AppServer.trans_files(2);
Open;
把文件从ClientDataSet2中写入磁盘;
DCOMConnection1.AppServer.trans_files(0);
end;
以上代码未写数据压缩的过程,在文件进/出ClientDataSet时最好压缩/解压。
本方法在Win2k+Delphi6下运行通过,曾经互传60M的文件,一切正常。
如果使用数据库中的一个表来传输也可以,只不过需要经常pack,否则会留下大量垃圾。
在远程数据模块上添加ClientDataSet1,和DataSetProvider1,
客户机上添加相应的ClientDataSet2,程序大致如下:
一.服务器部分:
1.在数据模块建立时
With ClientDataSet1do
begin
With FieldDefs.AddFieldDefdo
begin
DataType := ftString;
Size := 100;
Name := 'f_name';
end;
With FieldDefs.AddFieldDefdo
begin
DataType := ftBlob;
Name := 'f_cont';
end;
With IndexDefs.AddIndexDefdo
begin
Fields := 'f_name';
Name := 'idx';
end;
CreateDataSet;
end;
2.”Add to Inteface...“ 添加接口过程
//up_or_down=0 清除临时数据
// =1 文件上传
// =2 文件下传
procedure Txxxxx.trans_files(up_or_down: integer);
var fn: string;
begin
with ClientDataSet1do
begin
case up_or_down of
0: EmptyDataSet;
1: begin
first;
while not eofdo
begin
fn:=yourdir+FieldByName('f_name').AsString;
(FieldByName('f_cont') as TBlobField).SaveToFile(fn);
next;
end;
end;
2: begin
把文件写入ClientDataSet1中;
end;
else
begin
根据自己的定义,作点其它事情
end;
end;
end;
end;
二.客户机部分:
1.上传
with ClientDataSet2do
begin
把文件写入ClientDataSet2中;
ApplyUpdates(0);
DCOMConnection1.AppServer.trans_files(1);
end;
2.下传
with ClientDataSet2do
begin
Close;
DCOMConnection1.AppServer.trans_files(2);
Open;
把文件从ClientDataSet2中写入磁盘;
DCOMConnection1.AppServer.trans_files(0);
end;
以上代码未写数据压缩的过程,在文件进/出ClientDataSet时最好压缩/解压。
本方法在Win2k+Delphi6下运行通过,曾经互传60M的文件,一切正常。