lazarus、delphi文件下载断点续传的实现

本文介绍了如何在lazarus和delphi环境下,借助miniframe开源Web框架实现文件HTTP下载的断点续传功能。详细讲述了服务器端和客户端的代码实现,包括文件分块下载、合并以及处理服务器文件更新的情况。提供全部源码和Demo下载链接。
摘要由CSDN通过智能技术生成

下载大文件时,断点续传是很有必要的,特别是网速度慢且不稳定的情况下,很难保证不出意外,一旦意外中断,又要从头下载,会很让人抓狂。断点续传就能很好解决意外中断情况,再次下载时不需要从头下载,从上次中断处继续下载即可,这样下载几G或十几G大小的一个文件都没问题。本文介绍利用miniframe开源Web框架分别在lazarus、delphi下实现文件HTTP下载断点续传的功能,本文Demo还实现了批量下载文件,同步服务器上的文件到客户端的功能。文件断点续传原理:分块下载,下载后客户端逐一合并,同时保存已下载的位置,当意外中断再次下载时从保存的位置开始下载即可。这其中还要保证,中断后再次下载时服务器上相应的文件如果更新了,还得重新下载,不然下载到的文件是错了。说明:以下代码lazarus或delphi环境下都能使用。全部源码及Demo请到miniframe开源web框架下载: miniframe开源Web框架(适配delphi、lazarus)或https://github.com/dajingshan/miniframe。

服务器端代码

文件下载断点续传服务器端很简单,只要提供客户端要求下载的开始位置和指定大小的块即可。

以下是服务器获取文件信息和下载一个文件一块的代码:

 
  1. <%@//Script头、过程和函数定义
  2. program codes;
  3. %>
  4. <%!//声明变量
  5. var
  6. i,lp: integer;
  7. FileName, RelativePath, FromPath, ErrStr: string;
  8. json: TminiJson;
  9. FS: TFileStream;
  10. function GetOneDirFileInfo(Json: TminiJson; Path: string): string;
  11. var
  12. Status: Integer;
  13. SearchRec: TSearchRec;
  14. json_sub: TminiJson;
  15. begin
  16. Path := PathWithSlash(Path);
  17. SearchRec := TSearchRec.Create;
  18. Status := FindFirst(Path + '*.*', faAnyFile, SearchRec);
  19. try
  20. while Status = 0 do
  21. begin
  22. if SearchRec.Attr and faDirectory = faDirectory then
  23. begin
  24. if (SearchRec.name <> '.') and (SearchRec.name <> '..') then
  25. GetOneDirFileInfo(Json, Path + SearchRec.Name + '\');
  26. end else
  27. begin
  28. FileName := Path + SearchRec.Name;
  29. try
  30. if FileExists(FileName) then
  31. begin
  32. json_sub := Pub.GetJson;
  33. json_sub.SO; //初始化 或 json.Init;
  34. json_sub.S['filename'] := SearchRec.name;
  35. json_sub.S['RelativePath'] := GetDeliBack(FileName, FromPath);
  36. json_sub.S['FileTime'] := FileGetFileTimeA(FileName);
  37. json_sub.I['size'] := SearchRec.Size;
  38. json.A['list'] := json_sub;
  39. end;
  40. except
  41. //print(ExceptionParam)
  42. end;//}
  43. end;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值