`

ftp断点继传

阅读更多

导语:  如果ftp server支持REST指令(可以通过ftp client登入,然后输入REST 100,然后检查服务端响应),则上传或下载失败后,下次连接成功后可以从断点开始继续传输数据;

 

        下面是基于Delphi7的组件IdFTP的示例代码,比自己用指令实现方便。

        

        断点上传:

procedure TFtpThread.Execute;
var
  AFileStream: TFileStream;
  sFileName: string;
begin
  sFileName := ExtractFileName(AFileName);
  AFileStream := TFileStream.Create(AFileName, fmOpenRead);
  try
  with frmMain.IdFTP2 do
  try
    if Connected then
      Disconnect; //重新连接
    Username := 'zzzz';
    Password := 'yyyyyy';
    Host := 'xx.xx.xx.xx';
    Port := 21;
    Passive := mypassive;
    Connect;
   except
    on e: Exception do
    begin
        frmMain.StatusBar1.Panels[0].Text := '出错,异常:' + E.Message;
        frmMain.WriteLog(E.Message);
        AFileStream.Free;
        exit;
    end;
   end;
    // 获取断点
    finishedSize := frmMain.IdFTP2.Size(sFileName);
    AFileStream.Seek(finishedSize, soFromBeginning);
    // 开始断点续传
    BytesToTransfer := AFileStream.Size;
    frmMain.ProgressBar1.Max :=  BytesToTransfer div 1024;
    AFileStream.Position := finishedSize;
    
   try
    {while (not Terminated) and (AFileStream.Position < AFileStream.Size) do
    begin
      frmMain.IdFTP2.Put(AFileStream, sFileName, true);
    end;
    AMemStream.Free; }
     frmMain.IdFTP2.Put(AFileStream, sFileName, true);
   except
    on e: Exception do
    begin
        frmMain.StatusBar1.Panels[0].Text := '出错,异常:' + E.Message;
        frmMain.WriteLog(E.Message);
        AFileStream.Free;
        exit;
    end;
   end;
  // 判断是否上传完毕
  if AFileStream.Position = AFileStream.Size then
    frmMain.StatusBar1.Panels[0].Text := '上传完毕!'
  else
    frmMain.StatusBar1.Panels[0].Text := '未完成上传,点击上传继续传输!';
    AFileStream.Free;
  except
      on e: Exception do
    begin
        frmMain.StatusBar1.Panels[0].Text := '出错,异常:' + E.Message;
        frmMain.WriteLog(E.Message);
        AFileStream.Free;
        exit;
    end;
  end;
end;

 

   断点下载:

  

procedure TfrmMain.FtpDownLoad(aURL, aFile: string);
var
  tStream: TFileStream;
  sName, sPass, sHost, sPort, sDir,sFile: string;
  bResume: Boolean;
begin //ftp方式下载
  if FileExists(aFile) then //建立文件流
    tStream := TFileStream.Create(aFile, fmOpenWrite)
  else
    tStream := TFileStream.Create(aFile, fmCreate);

  GetFTPParams(aURL, sName, sPass, sHost, sPort, sDir,sFile);
  with IdFTP1 do
  try
    if Connected then
      Disconnect; //重新连接
    Username := sName;
    Password := sPass;
    Host := sHost;
    Port := StrToInt(sPort);
    Passive := mypassive;
    Connect;
   except
   on e: Exception do
   begin
        Application.MessageBox(PChar(E.Message), 'error', 16);
        WriteLog(E.Message);
        exit;
   end;
   end;
  IdFTP1.ChangeDir(sDir); //改变目录
  BytesToTransfer := IdFTP1.Size(sFile);
  ProgressBar1.Max := BytesToTransfer div 1024;
  if FileExists(aFile) then
    bResume := true
  else
     bResume := false;

  try
    if bResume then //续传
    begin
      //ProgressBar1.Position := tStream.Size div 1024;
      finishedSize := tStream.Size;
      tStream.Position := tStream.Size;
      IdFTP1.Get(sFile, tStream, True);
    end
    else begin
      IdFTP1.Get(sFile, tStream, False);
    end;
    if tStream.Position = BytesToTransfer then
    begin
      StatusBar1.Panels[0].Text := '下载完成';
    end;
  finally
    tStream.Free;
  end;
end;

//ftp://user:pwd@foolish.6600.org:2003/soft/list.mp4
procedure TfrmMain.GetFTPParams(var aURL, sName, sPass, sHost, sPort,
  sDir,sFile: String);
var
  URI: TIdURI;
begin
  URI := TIdURI.Create(aURL); //建立
  try
    sHost := URI.Host; //主机
    sPort := URI.Port;
    sName := URI.Username;
    sPass := URI.Password;
    sDir := URI.Path;
    sFile := URI.Document;
  finally
    URI.Free;
  end;
end;

 

          

0
0
分享到:
评论

相关推荐

    WPF ftp上传下载支持断点续传

    在WPF中添加FTP断点续传功能,你需要以下步骤: 1. 初始化FTP客户端:使用选择的FTP库创建一个客户端对象,设置服务器地址、用户名和密码。 2. 检查文件是否存在:在上传之前,检查服务器上是否有同名文件,如果...

    vc下ftp协议实现多线程断点续传源代码

    3.支持段点继传,也就是说文件可分N次传送. 4.分服务端和客户端,服务器支持多客户. 5.在传送过程中可实实对话,有聊天功能. 6.为了提高效率,本软件做得短小精悍,两文件总共只有100K,直截运行,不用安装. 7.麻雀虽小,但...

    FTP服务器如何传送局域网文件局域网文件共享服务器.docx

    8.断点续传:FTP服务器可以实现断点续传,避免了文件传送失败的风险。 知识点:FTP服务器可以实现断点续传,避免了文件传送失败的风险。 9.权限控制:FTP服务器可以实现权限控制,限制用户的访问权限。 知识点:...

    FTP服务器软件—简单易用

    8. **断点续传**:某些FTP客户端和服务器支持断点续传功能,即使在传输中断后,也能从上次停止的地方继续,这对于大文件传输非常有用。 掌握以上FTP服务器软件的基本知识,可以帮助用户更有效地设置和管理FTP服务,...

    育网校园云盘安装包

    9、断点继传秒传等,为您节约时间和海量存储空间 10、全面取代FTP,管理更轻松,可以免费部署体验 市场规模: 学校有服务器是我们的客户,没有服务器可以帮客户采购新服务器,育网云盘是一套精准校园文件管理系统,...

    育网私有云盘,校园云盘客户端

    10、断点继传秒传等,为您节约时间和海量存储空间 11、全面取代FTP,管理更轻松,可以免费部署体验 市场规模: 学校有服务器是我们的客户,没有服务器可以帮客户采购新服务器,育网 云盘是一套精准校园文件管理系统...

    V6Chat---ipv6聊天软件源代码

    这可能包括断点续传、进度显示、错误恢复等功能。为了提高效率,开发者可能采用了多线程或异步I/O技术来并行处理文件传输,同时还要考虑安全问题,如数据加密以保护用户隐私。 总的来说,V6Chat的源代码涵盖了IPv6...

    NASA-dem下载说明.pdf

    邮件中提供了两种FTP下载方式,一种是整理好的文件目录,支持断点续传,另一种是打包文件。 在处理和分析ASTER G-Dem数据时,用户需要注意数据的网格结构和像素大小,以便正确地进行地理配准和插值操作。与其他DEM...

    vc++ 开发实例源码包

    2:FTP下载支持多个站点同时下载一个文件(同时支持断点续传). 3:可以在不下载ZIP.RAR.ISO文件的情况下查看文件里面的目录文件. 4:支持多语言. 5:操作综合其它软件. 6:自定义快捷键. 7:在IE工具栏上加按钮,可以直接...

Global site tag (gtag.js) - Google Analytics