【问题标题】:How do I upload a file using http post? Delphi 2009如何使用 http post 上传文件?德尔福 2009
【发布时间】:2012-06-09 00:15:14
【问题描述】:

我的目标是通过 HTTP 帖子上传文本文件,我使用的是 Delphi 2009。

比如说下面的网址

https://www.example.com/ex/exampleAPI.asmx/Process

我知道可以通过使用 TIdHttp 组件来完成。以及下面的调用

IdHttp1.Post();

但我不知道如何设置所有内容,即指定 url 并包括要发布的文件。

谢谢。

【问题讨论】:

    标签: delphi file-upload http-post delphi-2009 indy


    【解决方案1】:

    TIdHTTP 有两个重载版本的Post(),它们以文件名作为输入:

    var
      Response: String;
    
    Response := IdHTTP1.Post('https://www.example.com/ex/exampleAPI.asmx/Process', 'c:\filename.txt');
    

    .

    var
      Response: TStream;
    
    Response := TMemoryStream.Create;
    IdHTTP1.Post('https://www.example.com/ex/exampleAPI.asmx/Process', 'c:\filename.txt', Response);
    ...
    Response.Free;
    

    请注意,您要发布到 HTTPS URL,因此您需要先将启用 SSL 的 IOHandler(例如 TIdSSLIOHandlerSocketOpenSSL)分配给 TIdHTTP.IOHandler 属性。

    【讨论】:

    • 谢谢,但是当我尝试编译时出现以下错误。 “E2250 没有可以使用这些参数调用的 'Post' 的重载版本”有什么想法吗?
    • 那么你没有使用最新版本的 Indy,因为当前版本确实有这样的重载可用:function Post(AURL: string; const ASourceFile: String{$IFDEF STRING_IS_ANSI}; ADestEncoding: TIdTextEncoding = nil{$ENDIF}): string; overload;procedure Post(AURL: string; const ASourceFile: String; AResponseContent: TStream); overload;
    • 好吧,我正在尝试更新 Indy,但我遇到了很多麻烦,这很痛苦。我以前从未安装过软件包。有没有办法偶然用 TWebBrowser 做到这一点?
    • 要使用TWebBrowser,您必须将整个文件数据存储到包含varByte 数组的Variant 中(使用VarArrayCreate() 分配Variant,然后您可以将文件数据复制到其内存块中),然后您可以将Variant 传递给TWebBrowser.Navigate() 方法的PostData 参数。不过,TWebBrowser 是一个视觉组件。它不适用于非视觉工作。不过,您可以改用 Microsoft 的 WinInet/WinHTTP API。
    • 嘿,所以我能够更新 Indy 组件。但是对于 TIdHTTP 帖子的两种情况,我都遇到了错误。对于您提到的第一种情况,我收到“HTTP/1.1 500 内部服务器错误”。 - 你知道这可能意味着什么吗?对于第二种情况,我得到“不兼容的类型:'TStream'和'过程,无类型指针或无类型参数'”显然它无法处理我的响应:TStream;参数..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多