用Indy10中的IdHTTP组件上传文件

本文介绍了如何在C++Builder6 Update4中使用Indy10的IdHTTP组件上传文件。首先,需要安装Indy10,然后在Form上添加IdHTTP组件和Button组件。在Button的点击事件中编写上传代码。为了显示进度,可以添加ProgressBar组件,并在IdHTTP的OnWorkBegin和OnWork事件中更新进度。此功能可进一步扩展,如使用OpenDialog选择文件,甚至将其转换为ActiveX在IE中使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在C++Builder6 Update4中安装好Indy10,可以在www.ccrun.com中找到Indy10的安装包及安装方法;

2、 在C++Builder6中建立一个新的Application,在Form上放置一个IdHTTP组件,再放置一个Button组件,在Button组件的OnClick事件中写入如下代码:

void  __fastcall TForm1::Button1Click(TObject  * Sender)
{
    TIdStringStream
*  ResponseStream  =   new  TIdStringStream(NULL);
    TIdMultiPartFormDataStream
*  PostStream  =   new  TIdMultiPartFormDataStream();
    TIdStringList
*  UploadFile  =   new  TIdStringList();

    
try {
        UploadFile
-> Values[ " UpFile " =   " c:/test.doc " ;     // 假设需要上传的文件为C盘根目录下的test.doc

        IdHTTP1
-> Request -> ContentType  =  PostStream -> RequestContentType;
        PostStream
-> AddFile( " UpFile " ,UploadFile -> Values[ " UpFile " ],GetMIMETypeFromFile(UploadFile -> Values[ " UpFile " ]));
        IdHTTP1
-> Post( " http://localhost/ " , PostStream, ResponseStream);
    }
    __finally
    {
        delete UploadFile;
        delete PostStream;
        delete ResponseStream;
    }
}

3、如果想加上进度条,还可以在Form上放置一个ProgressBar组件,然后再分别在IdHTTP组件的OnWorkBegin和OnWork两个事件中写入如下代码:

void  __fastcall TForm1::IdHTTP1WorkBegin(TObject  * ASender, TWorkMode AWorkMode, __int64 AWorkCountMax)
{
    ProgressBar1
-> Min  =   0 ;
    ProgressBar1
-> Max  =  AWorkCountMax;
}

 

void  __fastcall TForm1::IdHTTP1Work(TObject  * ASender, TWorkMode AWorkMode, __int64 AWorkCount)
{
    ProgressBar1
-> Position  =  ProgressBar1 -> Position  +  AWorkCount;
}

这样就可以模拟HTML中Input的File来进行文件上传了,还可以继续完善这个功能,例如选择文件(可以利用OpenDialog组件)。当然,把这个转换成ActiveX,运行在客户端IE中,那就更加方便了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值