procedure Resume(sFilePath:string;IDFtp: TIdFTP);
const
Send_Buffer = 1048576; //一次提交1MB的东西
var
AFileStream: TFileStream;
AMemStream: TMemoryStream;
sFileName: string;
iFileSize: Double;
Count:Integer; //循环次数,
AddCount:Double ; //每次增加数
LastTimeTransfer:Int64;
i: Integer;
begin
sFileName := ExtractFileName(sFilePath );
//计算要进行多少次
iFileSize := GetFileSize(sFilePath);
Count := Round(iFileSize/Send_Buffer); //得到的次数
if Count<>0 then
AddCount := 100/count
else
AddCount := 100; AFileStream := TFileStream.Create(sFilePath, fmOpenRead or fmShareExclusive);
IDFTP.TransferType := ftBinary;
try
if IDFtp.Connected then
begin
//获取断点
AFileStream.Seek(IDFtp.Size(sFileName), soBeginning);
//开始断点续传
AMemStream := TMemoryStream.Create;
try
while (IDFtp.Connected) and (AFileStream.Position < AFileStream.Size) do
begin
AMemStream.Clear;
AMemStream.CopyFrom(AFileStream,
min(Send_Buffer, AFileStream.Size - AFileStream.Position));
LastTimeTransfer := IDFtp.Size(sFileName);
if LastTimeTransfer=-1 then
IDFtp.Put(AMemStream, sFileName, False)
else
begin
IDFtp.Put(AMemStream, sFileName, True);
end;
end;
Alst.EndUpdate;
AMemStream.Free;
except
AMemStream.Free;
raise;
end;
//判断是否上传完毕
if AFileStream.Position = AFileStream.Size then
ShowMessage('上传完毕')
else
ShowMessage('上传中止');
AFileStream.Free;
end;
except
AFileStream.Free;
ShowMessage('出错啦!');
end; end;用这个方法上传之后,上传的文件为1024KB,求高手解答
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货