프로그래밍/델파이

WinInet Component Suite를 이용한 파일 업로드(POST) 예제

채윤아빠 2009. 9. 29. 11:32
728x90
반응형
앞서 WinInet Component Suite를 소개했었습니다.

GET 방식에 대한 예제만 있었는데, 이번에는 POST 방식으로 파일 업로드하는 예제를 소개하겠습니다.

파일을 업로드 하기 위해서는 multipart/form-data로 데이터를 전송해야 합니다.

multipart/form-data 형식으로 데이터를 직접 만드는 방식 보다는, 인디에 이미 클래스화 되어 있는 TIdMultiPartFormDataStream로 간단하게 만들 수 있습니다.

자세한 내용은 아래의 소스를 참조해 주시기 바랍니다.
uses IdMultipartFormData, WINet

var
AIdMultiPartFormDataStream : TIdMultiPartFormDataStream;
AStringStream : TStringStream;
begin
AIdMultiPartFormDataStream := TIdMultiPartFormDataStream.Create;
AStringStream := TStringStream.Create('');
with INetHttp do
try
AIdMultiPartFormDataStream.AddFormField('desc', '4');
AIdMultiPartFormDataStream.AddFormField('title', '5');
AIdMultiPartFormDataStream.AddFormField('folder_no', '6');
AIdMultiPartFormDataStream.AddFile('upload_pic', edtFile.Text, 'application/octet-stream');
AIdMultiPartFormDataStream.Seek(0, 0);

AStringStream.CopyFrom(AIdMultiPartFormDataStream, AIdMultiPartFormDataStream.Size);

INetUrl.Url := edtUrl.Text;
ServerName := INetUrl.HostName;
Open;

OpenRequest('POST', INetUrl.UrlPath);
SendRequest('Content-Type: multipart/form-data; boundary=' + AIdMultiPartFormDataStream.Boundary, AStringStream.DataString);
finally
CloseRequest;
Close;

AStringStream.Free;
AIdMultiPartFormDataStream.Free;
end;
end;

아쉬운 점은 TINetHttp.SendRequest 메소드에서 스트림(TStream)을 지원하지 않는 점입니다.