请问"上载断点续传"的原理是什么???(20分)

  • 主题发起人 主题发起人 go2
  • 开始时间 开始时间
http://go2.163.com/~filmormusic/ycml.zip
 
是FTP还是Http?
 
应该是ftp吧,我也不了解,只是看了cuteFTP得功能说明,说可以
“上载断点续传”,我只是知道下载可以断点续传,没有想到上载也行,
所以想了解一下“上载断点续传"”得原理
 
其实上载和下传是一样的
 
查一查FTP的命令就有啦。反正这东西并不是什么技术,
都是靠服务器支持相应的命令而实现的。换句话说,可
以封掉的。
 
使用FTP控件下载一个目录
delphi中的nmftp控件中Download函数只能下载一个文件,没有提供一个下载整个目录(包含子目录)的函数。
我编写了个实现目录下载功能的方法,需要用到该功能的用户可参考一下。
file://目录下载
function tftp.ex_download(remote_dir,local_dir:string):boolean;
var
i,j,count1:integer;
att,ss:string;
current_dir:string;
temp_dir:string;
begin
try begin
NMFTP1.ChangeDir(remote_dir);
current_dir:=remote_dir;
temp_dir:=copy(current_dir,2,length(current_dir));
if not DirectoryExists(local_dir) then CreateDir(local_dir);
if not directoryexists(local_dir+temp_dir) then createdir(local_dir+temp_dir);
nmftp1.ParseList:=true;
NMftp1.list;
count1:=nmftp1.FTPDirectoryList.name.Count;
for i:=0 to count1-1 do begin
file://必须
NMFTP1.ChangeDir(current_dir);
nmftp1.list;
ss:=nmftp1.FTPDirectoryList.name.Strings;
att:=nmftp1.FTPDirectoryList.Attribute.Strings;
if (copy(pchar(att),1,1)<>'d')and(copy(pchar(att),1,1)<>'D') then begin
if not DirectoryExists(local_dir) then CreateDir(local_dir);
NMFTP1.Download(current_dir+ss,local_dir+temp_dir+ss);
end
else begin
if not directoryexists(local_dir+temp_dir+ss) then createdir(local_dir+temp_dir+ss);
file://递归调用
ex_download(remote_dir+ss+'/',local_dir);
end;
end;
result:=true;
end
except
On E:Exception do begin
result:=false;
end;
end;
end;


 
CuteFtp当然就是FTP了 :)
NMFtp有个过程UploadRestore可以实现断点续传(上传),不过强烈建议不要用NMFtp;
ICS的FtpClient和Indy的IdFtp好象没有这个功能,但是它们都有Append的功能,而且
运行流的方式,所以可以通过自己写代码一实现断点上传的功能。
 
续传的原理只一个:就是ftp的rete命令
 
分不多,包涵包涵
 
to sonie:rete是什么命令?还请赐教。
to go2:呵呵,要是嫌分少的话,我就不进来了。 :)
 
多人接受答案了。
 
CuteFtp当然就是FTP了 :)
NMFtp有个过程UploadRestore可以实现断点续传(上传),不过强烈建议不要用NMFtp;
ICS的FtpClient和Indy的IdFtp好象没有这个功能,但是它们都有Append的功能,而且
运行流的方式,所以可以通过自己写代码一实现断点上传的功能。

只是教父,你能说得更清楚一点吗?
我用的是INDY.IDFTP.PUT方法中的APPEND参数.不过怎么用流的方式来做,还请提示一下
 
好久没有弄FTP方面的东西了,而且以前没怎么用INDY,都是用的ICS。
我看了一下INDY的帮助,那个AAppend参数应该是将SourceFile整个Append到目标文件后,要想实现继传,还是得用文件流,先用文件流打开本地文件,然后将Postion指到需要的地方,再使用带Append参数的Put函数。
纯属猜测,你自己试试看。
 
后退
顶部