delphi下载文件(delphi用idhttp怎么实现下载文件的简单功能(不用多线程,写一个按钮实例就行,学习一下))

本文目录
- delphi用idhttp怎么实现下载文件的简单功能(不用多线程,写一个按钮实例就行,学习一下)
- Delphi中,怎么使用FTP主动下传文件
- delphi ftp下载文件问题
- delphi 三层架构如果下载数据库中的二进制流文件
- DELPHI IDHTTP 下载文件的问题
- 用Delphi实现文件下载的几种方法
- delphi auAutoUpgrader 如何下载文件夹
- delphi用URLDownloadToFile下载文件,用进度条跟踪下载进度
- 我用delphi编写一个程序,想在程序中添加从服务器下载word文档到本地的功能
delphi用idhttp怎么实现下载文件的简单功能(不用多线程,写一个按钮实例就行,学习一下)
procedure TForm1.Button1Click(Sender: TObject);
var mystream1 :TMemoryStream;
begin
mystream1 :=TMemoryStream.Create;
***隐藏网址***
mystream1.SaveToFile(’c:\050831girl18.jpg’);
end;
Delphi中,怎么使用FTP主动下传文件
delphi 提供了 indy 组件包,其中 TIdFTP 可以实现通过以 FTP 方式进行文件的上传与下载。示例代码如下:
procedure TForm1.Button2Click(Sender: TObject);
var
tt :TIdFTPListItems;
t : TIdFTPListItem;
i : integer;
tfname : String;
begin
IdFTP1.TransferType := ftBinary; //指定为二进制文件 或文本文件ftASCII
for i:=0 to IdFTP1.DirectoryListing.Count-1 do
begin
tt := IdFTP1.DirectoryListing; //得到当前目录下文件及目录列表
t := tt.Items; //得到一个文件相关信息
Label1.Caption :=t.Text; //取出一个文件信息内容
tfname := t.FileName;
showmessage(t.OwnerName+’ ’+t.GroupName+’ ’+t.FileName+’ ’+t.LinkedItemName);
if IdFTP1.DirectoryListing.Items.ItemType = ditFile then //如果是文件
begin
IdFTP1.Get(tfname,’d:\FTPtest\’+tfname,True,True); //下载到本地,并为覆盖,且支持断点续传
end;
end;
end;
delphi ftp下载文件问题
Delphi FTP例子源码
unit TransferThread;
////////////////////////////////////////////////////////////////////////////////
// 模块说明: FTP传输核心模块类
// 功能: 指定一个下载(上传)的日期或文件名,系统执行传输功能(支持续传)
// 备注:该模块属于传输类的一个子线程模块.
////////////////////////////////////////////////////////////////////////////////
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ComCtrls,StdCtrls,IniFiles,IdIntercept, IdLogBase, IdLogEvent, IdAntiFreezeBase,
IdAntiFreeze, IdFTPList,IdBaseComponent,IdGlobal,IdComponent, IdTCPConnection, IdTCPClient,IdFTPCommon,
IdFTP;
type
TTransferThread = class(TObject)
private
{ Private declarations }
//进度显示
FProgressbar:TProgressbar;
//上传核心组件
FFTP:TIdFTP;
//上传列表内部类
FCombobox:TCombobox;
//上传信息显示
FLabel:TLabel;
//FTP地址
FFTP_STR_HOST:String;
//FTP用户名
FFTP_STR_USN:String;
//FTP用户密码
FFTP_STR_PWD:String;
//FTP端口
FFTP_STR_PORT:String;
//FTP上传标记
FFTP_STR_UTAG:String;
//FTP下载标记
FFTP_STR_DTAG:String;
//FTP指定的文件夹
FFTP_STR_FLODER:STring;
//传输文件大小
FFTP_LWD_BYTES:LongWord;
//传输开始时间
FFTP_DT_BEGINTIME:TDateTime;
//传输速度
FFTP_DUB_SPEED:Double;
//是否删除源文件.
FFTP_BOL_DEL:Boolean;
//是否正在传输文件
FFTP_BOL_ISTRANSFERRING:Boolean;
//类内部通用对话框函数
function MsgBox(Msg:string;iValue:integer):integer;
//获取用户当前的Windows临时文件夹
function GetWinTempPath:String;
//根据日期生成的日期文件名
function DateToFileName(DateTime:TDateTime):String;
//根据上传/下载标记生成完整的文件名
function GetFileFullName(sTag:String;DateTime:TDateTime):String;
protected
//传输核心函数
function TransferKernel(iTag:Integer;sFile:string;bDelSFile:boolean=False):boolean;
//传输组件的WorkBegin事件
procedure FFTPOnWorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer);
//传输组件的WorkEnd事件
procedure FFTPOnWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
//传输组件的Work事件
procedure FFTPOnWork(Sender: TObject; AWorkMode: TWorkMode;const AWorkCount: Integer);
public
//构造函数
constructor Create;
//析构函数
destructor Destroy;
//进度条控件属性
property Progressbar:TProgressbar read FProgressbar write FProgressbar default nil;
//列表控件属性
property Combobox:TCombobox read FCombobox write FCombobox default nil;
//只读的FTP核心组件
property FTP:TidFTP read FFTP;
//标签控件
property oLabel:TLabel read FLabel write FLabel default nil;
//列表方法(该方法需要指定Combobox,否则无效)
procedure List;
//依据日期下载文件
procedure DownLoad(dDate:TDateTime);overload;
//依据文件名下载文件
procedure DownLoad(sFileName:String);overload;
//依据日期上传文件
procedure UpLoad(dDate:TDateTime);overload;
//依据文件名上传文件
procedure UpLoad(sFileName:String);overload;
// procedure Execute; override;
end;
implementation
constructor TTransferThread.Create;
var
FFini:TIniFile;
FFilePath:String;
begin
//完成FTP相关参数的读取.
FFTP_BOL_ISTRANSFERRING:=False;
Try
FFilePath:=ExtractFilePath(APPlication.exeName)+’setup.ini’;
FFini:=TIniFile.Create(FFilePath);
FFTP_STR_HOST:=FFini.ReadString(’文件传输’,’服务器地址’,’’);
FFTP_STR_PORT:=FFini.ReadString(’文件传输’,’服务器端口’,’’);
FFTP_STR_USN:=FFini.ReadString(’文件传输’,’用户名’,’’);
FFTP_STR_PWD:=FFini.ReadString(’文件传输’,’密码’,’’);
FFTP_STR_FLODER:=FFini.ReadString(’文件传输’,’文件夹’,’’);
FFTP_STR_UTAG:=FFini.ReadString(’文件传输’,’上传标识码’,’’);
FFTP_STR_DTAG:=FFini.ReadString(’文件传输’,’上传标识码’,’’);
FFTP_BOL_DEL:=FFini.ReadBool(’文件传输’,’删源文件’,FALSE);
FFIni.Free;
Except
MsgBox(’读取FTP连接配置信息失败!请检查您的Setup.ini文件.’,MB_OK+MB_ICONERROR);
Exit;
Abort;
End;
//设置FTP相关参数
Try
FFTP:=TIdFTP.Create(nil);
FFTP.Host:=FFTP_STR_HOST;
FFTP.Port:=strtoint(FFTP_STR_PORT);
FFTP.UserName:=FFTP_STR_USN;
FFTP.Password:=FFTP_STR_PWD;
FFTP.TransferType:=ftASCII;
//事件驱动
FFTP.OnWork:=FFTPOnWork;
FFTP.OnWorkBegin:=FFTPOnWorkBegin;
FFTP.OnWorkEnd:=FFTPOnWorkEnd;
FFTP.Connect(True,-1);
Except
MsgBox(’连接远程FTP服务器失败!’#10#13’1.服务器地址错误,或服务器不可用.’#10#13’2.用户名或密码不正确.’#10#13’3.FTP服务端口设置不正确.’,MB_OK+MB_ICONERROR);
Exit;
Abort;
End;
end;
function TTransferThread.DateToFileName(DateTime: TDateTime): String;
var
Year, Month, Day:Word;
sYear,sMonth,sDay:String;
begin
DecodeDate(DateTime, Year, Month, Day); //日期
sYear:=inttostr(Year);
sMonth:=inttostr(Month);
sDay:=inttostr(Day);
//年
case Length(sYear) of
4: sYear:=sYear;
3: sYear:=’0’+sYear;
2: sYear:=’00’+sYear;
1: sYear:=’000’+sYear;
else
sYear:=’’;
end;
//月
case Length(sMonth) of
2: sMonth:=sMonth;
1: sMonth:=’0’+sMonth;
else
sMonth:=’’;
end;
//日
case Length(sDay) of
2: sDay:=sDay;
1: sDay:=’0’+sDay;
else
sDay:=’’;
end;
if (sYear=’’) or (sMonth=’’) or (sDay=’’) then
begin
Result:=’’;
Exit;
end;
if (sYear《》’’) and (sMonth《》’’) and (sDay《》’’) then
begin
Result:=sYear+sMOnth+sDay;
end;
end;
destructor TTransferThread.Destroy;
begin
FProgressbar:=nil;
FCombobox:=nil;
FLabel:=nil;
FFTP.Quit;
FFTP.Free;
end;
procedure TTransferThread.DownLoad(dDate: TDateTime);
begin
if Not FFTP_BOL_ISTRANSFERRING then
begin
TransferKernel(1,GetFileFullName(FFTP_STR_DTAG,dDate),FFTP_BOL_DEL);
end;
end;
procedure TTransferThread.DownLoad(sFileName: String);
begin
if Not FFTP_BOL_ISTRANSFERRING then
TransferKernel(1,sFileName,FFTP_BOL_DEL);
end;
procedure TTransferThread.FFTPOnWork(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
var
S,E: String;
H, M, Sec, MS: Word;
TotalTime: TDateTime;
DLTime: Double;
begin
TotalTime := Now - FFTP_DT_BEGINTIME; //总用时
DecodeTime(TotalTime, H, M, Sec, MS); //取出时\分\秒\毫秒
Sec := Sec + M * 60 + H * 3600; //转换成秒
DLTime := Sec + MS / 1000; //最终的下载时间
E:= Format(’ 使用时间:%2d:%2d:%2d’, );
if DLTime 》 0 then
//每秒的平均速度:XX K/s
FFTP_DUB_SPEED := {(AverageSpeed + }(AWorkCount / 1024) / DLTime{) / 2};
if FFTP_DUB_SPEED 》 0 then
begin
Sec := Trunc(((FFTP_LWD_BYTES - AWorkCount) / 1024) / FFTP_DUB_SPEED);
S := Format(’ 剩余时间:%2d:%2d:%2d’, );
S:=’速度: ’ + FormatFloat(’0.00 KB/秒’,FFTP_DUB_SPEED) + S + E ;
end
else
S:=’’;
if (FLabel《》nil) and (assigned(FLabel)) then
begin
FLabel.AutoSize:=True;
FLabel.Caption:=S;
FLabel.Update;
end;
if (FProgressBar《》nil) and (assigned(FProgressBar)) then
begin
FProgressBar.Position:=AWorkCount; //进度显示
FProgressBar.Update;
end;
end;
procedure TTransferThread.FFTPOnWorkBegin(Sender: TObject;
AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
FFTP_BOL_ISTRANSFERRING:=True;
FFTP_DT_BEGINTIME:=Now; //开始时间
FFTP_DUB_SPEED:=0.0; //初始化速率
if (FProgressBar《》nil) and (assigned(FProgressBar)) then
begin
if AWorkCountMax》0 then
begin
FProgressBar.Max:=AWorkCountMax;
FFTP_LWD_BYTES:=FProgressBar.Max;
end
else
FProgressBar.Max:=FFTP_LWD_BYTES;
end;
end;
procedure TTransferThread.FFTPOnWorkEnd(Sender: TObject;
AWorkMode: TWorkMode);
begin
FFTP_BOL_ISTRANSFERRING:=False;
FFTP_DUB_SPEED:=0.00;
if (FLabel《》nil) and (assigned(FLabel)) then
begin
FLabel.AutoSize:=True;
FLabel.Caption:=’’;
FLabel.Update;
end;
if (FProgressBar《》nil) and (assigned(FProgressBar)) then
begin
FProgressBar.Position:=0;
end;
end;
function TTransferThread.GetFileFullName(sTag:String;DateTime:TDateTime):String;
begin
Result:=sTag+DateToFileName(DateTime)+’FD.HXD’;
end;
function TTransferThread.GetWinTempPath: String;
var
TempDir:array of char;
begin
GetTempPath(255,@TempDir);
Result:=strPas(TempDir);
end;
procedure TTransferThread.List;
var
Dir_List:TStringList;
FoundFolder:Boolean;
iCount:Integer;
begin
if (FCombobox=nil) or (Not Assigned(FCombobox)) then
begin
Exit;
Abort;
end;
Dir_List:=TStringList.Create; //创建字符串列表类
Try
if Not FFTP.Connected then FFTP.Connect;
FFTP.ChangeDir(’/’);//根目录 //到服务器的根目录
FFTP.List(Dir_List,’’,True); //获取目录列表
FoundFolder:=False;
FFTP.TransferType:=ftASCII; //更改传输类型(ASCII类型)
for iCount:=0 to Dir_List.Count-1 do
begin
if FFTP.DirectoryListing.Items.ItemType=ditDirectory then
begin
if Dir_List.IndexOf(FFTP_STR_FLODER)= -1 then //判断该文件夹不存在
begin
//如果不存继续循环查找.
Continue;
end
else
begin
//如果存在,则直接退出循环
FoundFolder:=True;
Break;
end;
end;
end;
if FoundFolder then //判断该文件夹不存在
begin
FFTP.MakeDir(FFTP_STR_FLODER); //不存在,则创建一个新的文件夹
end;
FFTP.ChangeDir(FFTP_STR_FLODER);
FFTP.List(Dir_List,’*.HXD’,False);
if Dir_List.Count》0 then
begin
FCombobox.Items:=Dir_List;
end;
Finally
Dir_List.Free;
End;
end;
function TTransferThread.MsgBox(Msg: string; iValue: integer): integer;
begin
Result:=MessageBox(application.Handle,pChar(Msg),’系统信息’,iValue+MB_APPLMODAL);
end;
function TTransferThread.TransferKernel(iTag: Integer; sFile: string;
bDelSFile: boolean): boolean;
var
sTmpPath:String;
Dir_List:TStringList;
FoundFolder:Boolean;
iCount:Integer;
begin
sTmpPath:=GetWinTempPath; //获取本地系统临时目录
Dir_List:=TStringList.Create; //创建字符串列表类
Try
if Not FFTP.Connected then FFTP.Connect;
FFTP.ChangeDir(’/’);//根目录 //到服务器的根目录
FFTP.TransferType:=ftASCII; //更改传输类型(ASCII类型)
FFTP.List(Dir_List,’’,True); //获取目录列表
FoundFolder:=False;
for iCount:=0 to Dir_List.Count-1 do
begin
if FFTP.DirectoryListing.Items.ItemType=ditDirectory then //是目录
begin
if Dir_List.IndexOf(FFTP_STR_FLODER)= -1 then //判断该文件夹不存在
begin
//如果不存继续循环查找.
Continue;
end
else
begin
//如果存在,则直接退出循环
FoundFolder:=True;
Break;
end;
end;
end;
if FoundFolder then //判断该文件夹不存在
begin
FFTP.MakeDir(FFTP_STR_FLODER); //不存在,则创建一个新的文件夹
end;
//更改传输类型
FFTP.TransferType:=ftBinary;
Try
//找到相应的目录,则更换路径.
FFTP.ChangeDir(FFTP_STR_FLODER);
//0为上传
if iTag=0 then
begin
Try
FFTP.Put(sTmpPath+sFile,sFile);
Except
MsgBox(’上传文件失败!原因如下:’#13#10’1.服务器没有开启写文件的权限!’#10#13’2.程序发生异常,请重新上传!’,MB_OK+MB_ICONERROR);
Abort;
End;
FFTP_LWD_BYTES:=FFTP.Size(sFile);
if bDelSFile then //删除本地源文件
begin
DeleteFile(sTmpPath+sFile);
end;
Result:=True;
FFTP.Disconnect;
end;
//1为下载
if iTag=1 then
begin
//文件已经存在
Try
FFTP_LWD_BYTES:=FFTP.Size(sFile);
if FileExists(sTmpPath+sFile) then
begin
case MsgBox(’文件已经存在,要续传吗?’#13#10’是--续传’#10#13’否--覆盖’#13#10’取消--取消操作’,MB_YESNOCANCEL+MB_ICONINFORMATION) of
IDYES: begin
FFTP_LWD_BYTES:=FFTP_LWD_BYTES-FileSizeByName(sTmpPath+sFile);
//参数说明: 源文件,目标文件,是否覆盖,是否触发异常(True为不触发)。
FFTP.Get(sFile,sTmpPath+sFile,False,True);
end;
IDNO: begin
FFTP.Get(sFile,sTmpPath+sFile,True);
end;
IDCANCEL:
begin
FFTP_BOL_ISTRANSFERRING:=False;
end;
end;
end
else //文件不存在
begin
FFTP.Get(sFile,sTmpPath+sFile,True);
end;
Except
MsgBox(’上传文件失败!原因如下:’#13#10’1.服务器没有开启写文件的权限!’#10#13’2.程序发生异常,请重新上传!’,MB_OK+MB_ICONERROR);
Abort;
End;
if bDelSFile then //删除远程源文件
begin
FFTP.Delete(sFile);
end;
FFTP.Disconnect;
end;
Except
FFTP.Quit;
Result:=False;
End;
Finally
Dir_List.Free;
End;
end;
procedure TTransferThread.UpLoad(dDate: TDateTime);
begin
if Not FFTP_BOL_ISTRANSFERRING then
TransferKernel(0,GetFileFullName(FFTP_STR_DTAG,dDate),FFTP_BOL_DEL);
end;
procedure TTransferThread.UpLoad(sFileName: String);
begin
if Not FFTP_BOL_ISTRANSFERRING then
TransferKernel(0,sFileName,FFTP_BOL_DEL);
end;
end.
delphi 三层架构如果下载数据库中的二进制流文件
给你个例子:
aStream:=TMemoryStream.Create;
try
frameSheet1.cxSpreadBook.AutoRecalc:=false;
frameSheet1.cxSpreadBook.BeginUpdate;
cdsTemplateBodyCONTENT.SaveToStream(aStream); //-------------------------
aStream.Position := 0; //--------------------------
frameSheet1.cxSpreadBook.LoadFromStream(aStream);
frameSheet1.cxSpreadBook.EndUpdate;
finally
aStream.Free;
end;
3层结构服务器为COM+时,一直没有保存成功过,但读取没问题
DELPHI IDHTTP 下载文件的问题
把memo1.text改成memo1.lines.add吧
***隐藏网址***
***隐藏网址***
***隐藏网址***
用Delphi实现文件下载的几种方法
笔者最近开发的系统中需要写一个下载文件的功能 以前用BCB调用API写的很烦琐 忽然想起有一个API就可以搞定了 于是一大早就来搜索 这个API就是UrlDownloadToFile 不仅如此 Delphi的一些控件也可以轻松实现下载 如NMHTTP 指定NMHTTP InputFileMode := ture; 指定Body为本地文件名 指定Get就可以下载了 下面是详细代码 均出自CSDN 我把它们都整理到这儿 让大家方便查阅
uses UrlMon; function DownloadFile(Source Dest: string): Boolean; begin try Result := UrlDownloadToFile(nil PChar(source) PChar(Dest) nil) = ; except Result := False; end; end; if DownloadFile( // borland /delphi 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) nil) = ; except Result := False; end; end;
procedure TForm Button Click(Sender: TObject); const // URL Location SourceFile := // google /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; 加入如下代码
NMHTTP InputFileMode := ture; NMHTTP Body := 本地文件名 ; NMHTTP Header := Head txt ; NMHTTP OutputFileMode := FALSE; NMHTTP ReportLevel := Status_Basic; NMHTTP Proxy := 代理服务器的IP地址 ; NMHTTP ProxyPort := 代理服务器的端口号 ; With NMHTTP HeaderInfo do Begin Cookie := ; LocalMailAddress := ; LocalProgram := ; Referer := ; UserID := 用户名称 ; Password := 用户口令 ; End; NMHTTP Get( // abcdefg /sofare/a zip );
试试吧 Delphi的目录中有TNMHTTP控件的例子 NT + Win + IE + 你可以用URL Moniker的功能
uses URLMon;
OleCheck(URLDownloadToFile(nil URL Filename nil));
其中最后一个参数你还可以传入一个IBindStatusCallback的实现以跟踪下载进度或控制中止下载 简单的场合一句话就搞定了
B URL Moniker封装了大多数URL 而不是像NMHTTP那样封装协议 因此你可以用URLDownloadToFile下载HTTP FTP甚至本地文件和局域网文件 还有其他的custom moniker 比如MSITSTORE(MSDN Library的文档moniker实现)
lishixinzhi/Article/program/Delphi/201311/24713delphi auAutoUpgrader 如何下载文件夹
ForceDirectories(’D:\新文件夹’);
或md(’D:\新文件夹’);
procedure TForm1.Button1Click(Sender: TObject);
begin
if not DirectoryExists(’D:\bnabinge’) then
begin
ForceDirectories(’D:\bnabinge’);
end
else
begin
Messagebox(Handle,’文件夹已存在?’,’警告’, MB_ICONERROR);
abort;
end;
end;
delphi用URLDownloadToFile下载文件,用进度条跟踪下载进度
定义一下 DownLoadURL
var DownLoadURL:TDownLoadURL;//注意引用 TDownLoadURL类所在单元名称
begin
DownLoadURL.URL:=’’;
..........
你上面的地址也是出处转载抄袭过来的(最恨这样败类;)
也可以不定义 :
with TDownloadURL.Create(self) do//相当于后面都是省略了该对象直接用属性方法名称了
URL:=’’;
......
end;
我用delphi编写一个程序,想在程序中添加从服务器下载word文档到本地的功能
有两种实现方法。
第一种 就是用DELPHI的TCP空间,把服务器的WORD传输到客户端中,通过文件流传输。然后放一个保存控件,触发。
第二种:就是利用SQL存入WORD功能。客户端直接访问这个SQL来下载这个文档

更多文章:
我的世界2015老旧版本下载中文版(《我的世界》1.1.0b55版本怎么下载)
2026年9月6日 21:20







