[Delphi] 웹으로 파일 전송(POST) 하는 프로그램
웹으로 파일 전송(POST) 하는 프로그램
예전에 홈페이지나 블로그에 파일을 전송하는프로그램을 만든적 있었는데
그때 소스를 정리해서 올립니다.
폴더 선택
폴더 선택 다이얼로그 가 나와서 PC의 폴더를
선택하는 코드(SelectDirectory 사용)
---- 소스코드
const
SELDIRHELP = 1000;
var
Dir: String;
OSVersionInfo: TOSVersionInfo;
begin
// 폴더 선택
// 작업 경로 설정
Dir := CurPath;
OSVersionInfo.dwOSVersionInfoSize := sizeof(TOSVersionInfo);
GetVersionEx(OSVersionInfo);
if OSVersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then begin
if SelectDirectory('폴더 찾아보기','',Dir) then begin
if Dir[Length(Dir)] <> '\' then
Dir := Dir + '\';
CurPath := Dir;
LoadFileList(CurPath);
end;
end
else begin
if SelectDirectory(Dir,[sdAllowCreate, sdPerformCreate, sdPrompt],SELDIRHELP) then begin
if Dir[Length(Dir)] <> '\' then
Dir := Dir + '\';
CurPath := Dir;
LoadFileList(CurPath);
end;
end;
end;
---- 소스코드 끝
선택된 폴더에서 파일 읽어 오기
폴더내의 파일 목록을 일어오기 위해
TSearchRec 사용
---- 소스코드
procedure TfrmMain.LoadFileList(Path: String);
var
SearchRec: TSearchRec;
ListItem: TListItem;
begin
if Path = '' then Exit;
FileList.Clear;
// 여기에서는 이미지라 *.jpg, *.* 하면 모든 파일을 가져옴
if FindFirst(Path + '*.jpg',faAnyFile,SearchRec) = 0 then begin
repeat
FileList.Add(SearchRec.Name);
Until (FindNext(SearchRec) <> 0);
FindClose(SearchRec);
end;
end;
---- 소스코드 끝
웹페이지로 POST 전송하기
idHTTP를 사용하여 파일 목록의 파일들은 한번에 전송
---- 소스코드
var
i : integer;
DataStream : TidMultiPartFormDataStream;
rs: TMemoryStream;
begin
// 업로드
ProgressBar1.Min := 0;
ProgressBar1.Position := 0;
ProgressBar1.Max := FileList.Count;
for i := 0 to FileList.Count - 1 do begin
//for i := 0 to 9 do begin
try
DataStream := TIdMultiPartFormDataStream.Create;
rs := TMemoryStream.Create;
IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401';
idHTTP1.Request.ContentType := DataStream.RequestContentType;
DataStream.AddFormField('title',ExtractFileName(FileList.Strings[i]));
DataStream.AddFormField('tag','태그정보');
// Post 로 apple_logid 와 apple_passwd 값을 전송합니다.
DataStream.AddFile('image_file',CurPath + FileList.Strings[i],'application/octet-stream');
// upfile 변수에 'e:\downlogo.bmp' 파일 을 추가 합니다..
DataStream.Position := 0;
try
IdHTTP1.Post('파일을 받은 웹 URL',DataStream,rs);
finally
//ShowMessage(PChar(rs.Memory));
end;
finally
DataStream.Free;
rs.Free;
end;
ProgressBar1.Position := ProgressBar1.Position + 1;
Application.ProcessMessages;
Sleep(1000);
end;
ShowMessage('전송 완료');
end;
---- 소스코드 끝
POST 파일 전송 예제
Indy에 포함되어 있는 TidMultiPartFormData를 이용하여 웹페이지에
POST 파일 전송 하는 방법을 설명하겠습니다.
---- 소스코드
procedure TFmMain.Button1Click(Sender: TObject);
var
DataStream : TidMultiPartFormDataStream;
rs: TMemoryStream;
begin
DataStream := TIdMultiPartFormDataStream.Create;
rs := TMemoryStream.Create;
try
idHTTP1.Request.ContentType := DataStream.RequestContentType;
DataStream.AddFormField('logid',Trim(Edit1.Text));
DataStream.AddFormField('passwd',Trim(Edit2.Text));
// Post 로 apple_logid 와 apple_passwd 값을 전송합니다.
DataStream.AddFile('upfile','e:\downlogo.bmp','application/octet-stream');
// upfile 변수에 'e:\downlogo.bmp' 파일 을 추가 합니다..
DataStream.Position := 0;
try
IdHTTP1.Post('test.php',DataStream,rs);
finally
ShowMessage(PChar(rs.Memory));
end;
Finally
DataStream.Free;
end;
end;
---- 소스코드 끝
간단하게 idHTTP를 이용한 POST 전송
// 전달할 인수 설정
argv := TStringlist.Create;
argv.Add('TrustSvc='+Send_XML);
//호출
ret := IdHTTP1.Post(url, argv);
댓글
댓글 쓰기