2012-06-04 35 views
7

Mục tiêu của tôi là để tải lên một tập tin văn bản qua đường bưu HTTP Tôi đang sử dụng Delphi 2009.Làm cách nào để tải lên tệp bằng cách sử dụng bài đăng http? Delphi 2009

Nói ví dụ vào URL sau

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

Tôi hiểu nó có thể được thực hiện bằng cách sử dụng Thành phần TIdHttp. Và cuộc gọi sau đây

IdHttp1.Post(); 

Nhưng tôi không thể tìm ra cách thiết lập mọi thứ tức là chỉ định url và bao gồm tệp được đăng.

Cảm ơn.

Trả lời

8

TIdHTTP có hai phiên bản quá tải của Post() mà phải mất một tên tập tin như là đầu vào:

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; 

Lưu ý rằng bạn gửi bài đến một URL HTTPS, vì vậy bạn cần phải đầu tiên gán một IOHandler SSL được kích hoạt, chẳng hạn như TIdSSLIOHandlerSocketOpenSSL, đến TIdHTTP.IOHandler sở hữu trước đó.

+0

Cảm ơn bạn, nhưng khi tôi cố gắng biên dịch, tôi nhận được lỗi sau. "E2250 Không có phiên bản quá tải của 'Đăng' có thể được gọi với các đối số này" bất kỳ ý tưởng nào? – Trevor

+1

Sau đó, bạn không sử dụng phiên bản cập nhật của Indy, vì phiên bản hiện tại không có quá tải như vậy: 'function Post (AURL: string; const ASourceFile: String {$ IFDEF STRING_IS_ANSI}; ADestEncoding: TIdTextEncoding = nil { $ ENDIF}): chuỗi; quá tải, 'và' thủ tục Post (AURL: string; const ASourceFile: String; AResponseContent: TStream); Quá tải, ' –

+0

Được rồi, tôi đang cố gắng cập nhật Indy, nhưng đó là nỗi đau tôi đang gặp rất nhiều rắc rối. Tôi chưa bao giờ cài đặt các gói trước đây .. Có cách nào để làm điều đó với TWebBrowser một cách tình cờ không? – Trevor

Các vấn đề liên quan