[Delphi] 웹으로 파일 전송(POST) 하는 프로그램

2026. 6. 8. 12:58·Programming/Delphi

웹으로 파일 전송(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);

 

파일을 포함하지 않고 그냥 
변수값을만 URL 로 POST 전송하는 간단한 방법 입니다. 

 idHTTP를 사용하여 페이지 소스 가져오기

str := idHTTP.Get("가져올URL");

 

idHTTP를 사용하여 URL 이미지 가져오기

procedure TForm1.GetWebImage(AImageURL: String);
var
  ImageStream : TMemoryStream;
  HTTP        : TIdHTTP;
  JpgImage    : TJPEGImage;
begin
  if AImageURL = '' then Exit;
  
  ImageStream := TMemoryStream.Create;
  HTTP := TIdHTTP.Create(nil);
  try
     HTTP.Get(AImageURL, ImageStream);
     ImageStream.Position := 0;
     JpgImage := TJPEGImage.Create;
     try
        JpgImage.LoadFromStream(ImageStream);
        // 이미지를 표시할 컴포넌트
        Image1.Picture.Assign(JpgImage);
     finally
        JpgImage.Free;
     end;
  finally
     ImageStream.Free;
     HTTP.Free;
  end;
end;

'Programming > Delphi' 카테고리의 다른 글

[Delphi] 파일에서 이미지 타입 읽기  (0) 2026.06.14
[Delphi] 프로그래밍 팁 모음  (0) 2026.06.09
[Delphi] 웹브라우져 컨트롤을 이용하여 출력하기  (0) 2026.06.06
DirectShow 기본 Cam 프로그램  (0) 2026.05.31
[Delphi] 진법변환 (16->10, 10->2, 2->16. 10->8, 2->8)  (0) 2026.05.21
'Programming/Delphi' 카테고리의 다른 글
  • [Delphi] 파일에서 이미지 타입 읽기
  • [Delphi] 프로그래밍 팁 모음
  • [Delphi] 웹브라우져 컨트롤을 이용하여 출력하기
  • DirectShow 기본 Cam 프로그램
레이조(RayCho)
레이조(RayCho)
개발자 레이조(RayCho)의 블로그입니다. 똑똑하게 배우고 기록하는 공간
  • 레이조(RayCho)
    레이(Ray)의 개발이야기
    레이조(RayCho)
  • 전체
    오늘
    어제
    • 분류 전체보기 (73) N
      • Programming (73) N
        • Python (5)
        • Flutter (4)
        • Delphi (25)
        • Lazarus (1)
        • C#.NET (13) N
        • ASP.NET (5)
        • Database (6)
        • Game Dev (5)
        • Web (6)
        • ETC (3)
  • 블로그 메뉴

    • 홈
    • Introduce
    • 태그
    • 방명록
  • 링크

    • Naver Blog
    • Diary Blog
  • 공지사항

  • 인기 글

  • 태그

    개발환경
    C#
    소스코드
    프로그래밍
    기초
    POST
    csharp
    Flutter
    delphi
    PSP
    objectpascal
    mssql
    Web
    C++
    VCL
    델파이
    웹프로그래밍
    iis
    ASP.NET
    Python
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
레이조(RayCho)
[Delphi] 웹으로 파일 전송(POST) 하는 프로그램
상단으로

티스토리툴바