`
qzriso
  • 浏览: 236454 次
  • 性别: Icon_minigender_1
  • 来自: ph
社区版块
存档分类
最新评论

用Delphi实现文件下载的几种方法

阅读更多

笔者最近开发的系统中需要写一个下载文件的功能。以前用BCB调用API写的很烦琐,忽然想起有一个API就可以搞定了,于是一大早就来搜索。这个API就是UrlDownloadToFile。不仅如此,Delphi的一些控件也可以轻松实现下载,如NMHTTP,指定NMHTTP1.InputFileMode := ture; 指定Body为本地文件名,指定Get就可以下载了。下面是详细代码,均出自CSDN。我把它们都整理到这儿,让大家方便查阅。


uses UrlMon;
function DownloadFile(Source, Dest: string): Boolean;
begin
  try
    Result := UrlDownloadToFile(nil, PChar(source), PChar(Dest), 0, nil) = 0;
    except
      Result := False;
    end;
  end;
  
  if DownloadFile('http://www.borland.com/delphi6.zip, 'c:\kylix.zip') then
ShowMessage('Download succesful')
else ShowMessage('Download unsuccesful')


========================
例程:


Uses URLMon, ShellApi;
function DownloadFile(SourceFile, DestFile: string): Boolean;
begin
try
Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0;
except
Result := False;
end;
end;

procedure TForm1.Button1.Click(Sender: TObject);
const
// URL Location
SourceFile := 'http://www.google.com/intl/de/images/home_title.gif';
// Where to save the file
DestFile := 'c:\temp\google-image.gif';
begin
  if DownloadFile(SourceFile, DestFile) then
  begin
    ShowMessage('Download succesful!');
    // Show downloaded image in your browser
ShellExecute(Application.Handle,PChar('open'),PChar(DestFile),PChar(''),nil,SW_NORMAL)
  end
  else
  ShowMessage('Error while downloading ' + SourceFile)
end;


=================

加入如下代码:


NMHTTP1.InputFileMode := ture;
NMHTTP1.Body := '本地文件名';
NMHTTP1.Header := 'Head.txt';
NMHTTP1.OutputFileMode := FALSE;
NMHTTP1.ReportLevel := Status_Basic;
NMHTTP1.Proxy := '代理服务器的IP地址';
NMHTTP1.ProxyPort := '代理服务器的端口号';
With NMHTTP1.HeaderInfo do
  
  Begin
    Cookie := '';
    LocalMailAddress := '';
    LocalProgram := '';
    Referer := '';
    UserID := '用户名称';
    Password := '用户口令';
    End;
    
    NMHTTP1.Get(‘http://www.abcdefg.com/software/a.zip');


试试吧,Delphi的目录中有TNMHTTP控件的例子。NT4+,Win95+,IE3+,你可以用URL Moniker的功能。


uses URLMon;

...

OleCheck(URLDownloadToFile(nil,'URL','Filename',0,nil));


其中最后一个参数你还可以传入一个IBindStatusCallback的实现以跟踪下载进度或控制中止下载。简单的场合一句话就搞定了。

BTW, URL Moniker封装了大多数URL,而不是像NMHTTP那样封装协议,因此你可以用URLDownloadToFile下载HTTP,FTP甚至本地文件和局域网文件,还有其他的custom moniker,比如MSITSTORE(MSDN Library的文档moniker实现)。


var
DownLoadFile:TFileStream;
beginio
DownLoadFile:=TFileStream.Create('c:\aa.rar',fmCreate);
IdHTTP1.Get('http://www.sina.com.cn/download/aa.rar',DownLoadFile);
DownLoadFile.Free;
end;

//---------------------------


程序结束

分享到:
评论

相关推荐

    聊天机器人Delphi程序源码.rar

    Delphi聊天机器人程序,会和聊天用户进行简单的对话,回复简单的问题,实际上是预设了几种聊天用语,程序自动调用而实现。  聊天短语内容存储在Access数据库中,并做了防止重复回复的功能,尽量做到人性化,当然,...

    Delphi5开发人员指南

    4.2 构成Delphi 5项目的文件 79 4.2.1 项目文件 80 4.2.2 单元文件 80 4.2.3 窗体文件 80 4.2.4 资源文件 81 4.2.5 项目选项及桌面设置文件 81 4.2.6 备份文件 81 4.2.7 包文件 82 4.3 项目管理提示 82 4.3.1 一个...

    Delphi开发范例宝典目录

    实例197 采用API实现文件拖放 254 实例198 文件比较 255 第6章 操作系统与Windows相关程序 257 6.1 获得磁盘属性 258 实例199 获得硬盘序列号 258 实例200 获取映射驱动器路径 259 实例201 判断驱动器...

    一款超强的图形系统——Delphi源码Delphi-source-VG7.23

    Visual Graph设计思路和编程习惯非常类似这几种语言,对象的属性名称、函数名称都经过精心的设计,保证符合程序员的思维习惯。由于接口提供了完全的COM类库,当程序员在某个图形对象名后输入小数点时,立即出现下拉...

    delphi数据库-课程设计.doc

    数据库 3 二、系统设计 4 1、数据库的建立 4 2、管理系统建立 6 3、 实现功能 11 三、结论 13 一、简介 1.Delphi Delphi是Borland公司推出的可视化编程环境,它提供了一种方便、快捷的Windows应 用程序开发工具。...

    极速读取Excel文件中的海量数据并写入到数据库的实现

    通过程序方式从Excel文件中读取...这种方式的执行效率比传统方式提高了一个数量级,以前几分钟才能完成的导入操作,现在只需要几秒种! 本方法不需要任何第三方的支持库,程序代码也非常简单,希望能够帮助到大家!

    基于Delphi的仓库管理系统开发论文

    而用计算机来处理企业内部信息间的流通和使用,既可以实现数据信息的共享,控制好数据的冗余度,并使企业有统一的管理,提高信息的利用率;又可以实现整体数据的结构化,表示大量数据相互间的多种联系,这样就可以...

    加密算法 模块 加密算法 模块

    在本站提供了几款壳下载,需要的可以到“加壳技术”模块去下载,在校验的时候用得到,具体的方法在调用模块里面有。 本次更新增加了MD2、MD3、SHA1、SHA256、SHA384、SHA512、HAVAL128、HAVAL160、HAVAL192、HAVAL...

    Http/FTP多线程断点续传下载组件

    点量Http、FTP多线程断点续传下载组件(下载DLL)的开发目的是让用户可以无需关心Http/FTP协议的具体细节,只需要几十行甚至几行代码,便可以实现一个功能完善的Http/FTP下载软件。点量Http/FTP下载组件(DLL)支持...

    嵌入式系统详细文档

    用户只需要关注他们熟知的通讯规程,然后用一种图形化的方法来实现通讯的一个过程,而不需要对程序内部实现有所了解。所以希望通过这种二次开发平台的设计、开发来解决工控软件与大部分的硬件设备数据交换问题。 ...

    Maoinfo交互格式电子地图演示程序

    TObjInspector提供了几种独立的属性编辑器,用来编辑不同数据类型的属性,并且可以通过用户接口实现用户定义类型的编辑。Array和动态Array的元素类型可以是任何Delphi支持的类型,如基本类型、Class、record和其他...

    ReportMachine

    2、com版:是个单独的ocx文件(RMReport.ocx),是用Delphi 7.0及以上版本开发的,是对VCL版ReportMachine控件的再封装,具有VCL版的全部功能,安装、使用上更容易些,com版的ReportMachine可以用在vb,vc,vfp,pb等...

    专门人才信息管理系统 DELPHI 完整版

    它的特点是使用数据库和分时处理的计算机网络,并充分利用运筹学等数学方法,实现了硬件、软件和数据资源的共享。 总的说来,计算机技术的发展,其性价比大幅的下降,使得其被大量广泛的使用。针对现实中的各种应用...

    vc++ 开发实例源码包

    文件传送,多文件(超大文件)传送功能的实现,含文档。 MFC+DLL的编写和调用示例 如题。 MFC换肤完全贴图实现 如题。 Smile简体版 很简单,只能播放mp3格式的音乐。 功能: ---------------------------------...

    vc++ 应用源码包_1

    文件传送,多文件(超大文件)传送功能的实现,含文档。 MFC+DLL的编写和调用示例 MFC换肤完全贴图实现 Smile简体版 Linux内核完全注释附 MFC+消息循环贴图---金山毒霸界面 自绘控件实现。 MFCDemo DirectUI...

    vc++ 应用源码包_2

    文件传送,多文件(超大文件)传送功能的实现,含文档。 MFC+DLL的编写和调用示例 MFC换肤完全贴图实现 Smile简体版 Linux内核完全注释附 MFC+消息循环贴图---金山毒霸界面 自绘控件实现。 MFCDemo DirectUI...

    vc++ 应用源码包_6

    文件传送,多文件(超大文件)传送功能的实现,含文档。 MFC+DLL的编写和调用示例 MFC换肤完全贴图实现 Smile简体版 Linux内核完全注释附 MFC+消息循环贴图---金山毒霸界面 自绘控件实现。 MFCDemo DirectUI...

    vc++ 应用源码包_5

    文件传送,多文件(超大文件)传送功能的实现,含文档。 MFC+DLL的编写和调用示例 MFC换肤完全贴图实现 Smile简体版 Linux内核完全注释附 MFC+消息循环贴图---金山毒霸界面 自绘控件实现。 MFCDemo DirectUI...

    vc++ 应用源码包_3

    文件传送,多文件(超大文件)传送功能的实现,含文档。 MFC+DLL的编写和调用示例 MFC换肤完全贴图实现 Smile简体版 Linux内核完全注释附 MFC+消息循环贴图---金山毒霸界面 自绘控件实现。 MFCDemo DirectUI...

    压缩算法源码及相关教程

    这里包含几种压缩算法,其中lz77.pas和arith.pas为本人翻译自王咏刚先生的《笨笨 数据压缩教程》中的相关C实现。lh5unit.pas为网上见到的一个算法,本人还没有去深 入研究它,也放在了这里。lz77.pas为borland公布...

Global site tag (gtag.js) - Google Analytics