怎么在服务端保存从客户端上传的文件啊?已经设置好客户端有上传的权限了。
我是在服务端的onstorefile事件中编程的,但在onstorefile的几个参数中,上传的数据在哪里呢?测试过VStream的size是0,filename是客户端上传的文件名。
麻烦告诉我该怎么做,给个简单的例子,谢谢
我是在服务端的onstorefile事件中编程的,但在onstorefile的几个参数中,上传的数据在哪里呢?测试过VStream的size是0,filename是客户端上传的文件名。
麻烦告诉我该怎么做,给个简单的例子,谢谢
解决方案 »
- 查询oracle数据库里面的时间段
- 大家看看为什么会出错,如何解决?
- DBGRID导出EXCLE后,怎样保持原来的数据格式和自动调整列宽?
- 关于应用服务器的超难问题,高手快来!
- 如何在一表中增加多个记录?
- 请问有人见过一个叫TTF160_TLB的pas或dcu文件吗?在哪儿可以找到
- 请问高手 在MTS中怎样调试程序。。。
- 伴水,Chechy...高手救命!关于RTTI,自定义的控件包
- 如果你是广州的,如果你能自豪解决ActiveForm客户端查看网页请告诉我,我可以与你碰头讨论,确实能解决的一个问题给200元人民币,决不失
- 报表文件打不开
- 如果屏蔽DBGIRD里面按INSERT键增加以及按向下光标键增加..
- 疑问:关于DBGridEh的分组统计,请来看看吧!!
procedure TMainForm.IdFTPServer1StoreFile(ASender: TIdFTPServerThread;
const AFileName: String; AAppend: Boolean; var VStream: TStream);
var tempname,fname,extname:string;
i,k:integer;
flag:boolean;
begin
StatusBar1.Panels[4].Text := '开始接收客户数据...';
fname:=extractfilename(AFilename);
ExtName:=extractfileext(AFilename);
flag:=true;
k:=1;
if FileExists(storedir+fname) then //若文件已有同名存在,则自动编号
begin
for i:=1 to length(fname) do if fname[i]='.' then k:=i;
fname:=copy(fname,1,k-1);
i:=0;
while(i<1000)and flag do begin
tempname:=fname+inttostr(i)+extname;
if not FileExists( storedir+tempname) then flag:=false;
i:=i+1;
end;
fname:=tempname+extname;
VStream := TFileStream.create( StoreDir+Fname , fmCreate or fmShareExclusive ) ;
end;
end;
procedure TSingleDLoadFm.BitBtn1Click(Sender: TObject);
var
RetStr: string;
iReturn: integer;
//SaveFStream: TFileStream;
SaveFStream:Tmemorystream;
begin begin //============================================================
Animate1.Active := True;
Bitbtn1.Enabled := False;
try //发送下载的文件
DownLoadTcp.Write('文件下载' + EOL); //1-------SendfileCMD
DownLoadTcp.Write(Edit3.Text + Edit1.Text + EOL); //2-------SendfileName
except
DownLoadTcp.Disconnect;
Animate1.Active := False;
beep;
Self.Caption := '提示:网络信息发送失败!';
exit;
end;
//TmpFName := Edit2.Text + '\' + Edit1.Text;
TmpFName := Edit2.Text + Edit1.Text;
//================================文件接续
try
if FileExists(TmpFName) then
begin
//SaveFStream := TFileStream.Create(TmpFName, fmOpenReadWrite);
SaveFStream:=Tmemorystream.Create;
AlreadyReadLen := SaveFStream.Size;
end
else
begin
//SaveFStream := TFileStream.Create(TmpFName, fmCreate);
SaveFStream:=Tmemorystream.Create;
AlreadyReadLen := 0;
end;
except
beep;
beep;
Self.Caption := '错误提示:请重新指定下载目录!';
exit;
end;
//===============================
try
DownLoadTcp.WriteInteger(AlreadyReadLen); //---send filePos文件位置
except
SaveFStream.free;
Animate1.Active := False;
DownLoadTcp.Disconnect;
Self.Caption := '错误提示:网络信息发送失败!';
exit;
end;
try
//iReturn := DownLoadTcp.ReadInteger;
RetStr := DownloadTcp.ReadLn(EOL);
except
SaveFStream.free;
DownLoadTcp.Disconnect;
Animate1.Active := False;
Self.Caption := '错误提示:远程网络断开,接收失败!';
exit;
end;
if RetStr = 'OK' then //------------------------读取接收标志
begin //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//读数据------------------------开始-----
try
ReadFileLen := DownLoadTcp.ReadInteger;
except
SaveFStream.free;
DownLoadTcp.Disconnect;
Animate1.Active := False;
Self.Caption := '错误提示:远程网络断开,接收失败!';
exit;
end;
SaveFStream.Position := SaveFStream.Size;
ProgressBar1.Max := ReadFileLen + AlreadyReadLen;
ProgressBar1.Position := 0;
try
DownLoadTcp.ReadStream(SaveFStream, ReadFileLen);
except
SaveFStream.Free;
Animate1.Active := False;
DownLoadTcp.Disconnect;
Self.Caption := '错误提示:远程网络断开,接收失败!';
exit;
end;
SaveFStream.SaveToFile(TmpFName);
SaveFStream.free; //下载成功
Bitbtn3.Enabled := True;
beep;
Self.Caption := '下载完毕! 共:' + IntToStr(ProgressBar1.Max) + '字节';
ProgressBar1.Position := ProgressBar1.Max;
Sleep(100);
if Self.Tag = 1 then
// DelRemoteFile(Edit3.Text + Edit1.Text, Form1.IdFTCPClient);
DownLoadTcp.Disconnect;
Animate1.Active := False;
if checkBox1.Checked then Close;
exit;
end; //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
DownLoadTcp.Disconnect; //
Self.Caption := '反馈提示:远程文件定位失败,连接断开!';
Animate1.Active := False;
Bitbtn1.Enabled := True;
exit;
end; //============================================================
beep;
Self.Caption := '提示:网络连接失败!';
end;
procedure TDownLoadThread.Execute;
var
FromF: file of byte;
FileLen: integer;
NumRead, NumWritten: Integer;
Buf: array[1..32768] of Char;
tmStr:Tmemorystream;
begin
Synchronize(RegisteLog);
try
AssignFile(FromF, TheFileName);
FileMode := 0;
Reset(FromF);
Seek(FromF, ThePosition);
except
try
CloseFile(FromF);
except
end;
Self.Terminate;
exit;
end;
try
FileLen := FileSize(FromF);
SysThread.Connection.WriteInteger(FileLen - ThePosition);
except
CloseFile(FromF);
Self.Terminate;
exit;
end;
tmStr:=Tmemorystream.Create;
tmStr.LoadFromFile(TheFileName);
SysThread.Connection.OpenWriteBuffer;
SysThread.Connection.WriteStream(tmStr,true,false,0);
SysThread.Connection.CloseWriteBuffer;
tmStr.Free;
{
repeat
try
SysThread.Connection.OpenWriteBuffer;
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
SysThread.Connection.WriteBuffer(Buf, NumRead);
SysThread.Connection.CloseWriteBuffer;
except
CloseFile(FromF);
exit;
end;
until (NumRead = 0); }
CloseFile(FromF);
//SysThread.Connection.Disconnect;
self.Terminate;
end;