Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr

서버에 파일 업로드 하는 방법 소개 ~ FTP 이용


Recommended Posts

서버에 파일을 전송 하는 여러가지 방법 중에서 FTP 를 이용한 업로드 방식을 소개 합니다.

대부분의 서버에서는 FTP 서비스 활용이 매우 간단 하므로 클라이언트에서 FTP 를 이용하면 파일 업로드를 손쉽게 처리 할 수 있습니다.

또한 전송 상태를 클라이언트 앱에서 표출할 수 있어서 UI 화면을 구현 하는데도 도움이 됩니다.

VCL 과 FMX 에서 모두 사용이 가능 하므로 모바일 앱에서도 서버에 파일을 전송 할 수 있습니다.

샘플 프로젝트에는 서버의 접속 정보를 입력 받을 수 있는 에디터 창과 전송 버튼 및 파일 전송 상태를 표시하는 Progress 바를 사용 합니다.

메모장에서 접속 및 전송 상태의 로그를 출력 할 수 있게 하고 TIdFTP 컴포넌트를 가져다 놓습니다.

image.png

 

먼저 파일 전송 하는 부분 부터 설명 하면 BT_Upload 버튼 클릭 이벤트 한번으로 전송이 가능 합니다.

아래 소스와 같이 호스트에 서버 IP Adress 와 ID/PASS 를 입력 하고

IdFTP1.Put 에 로컬의 전송할 파일과 서버에 저장될 새로운 파일 이름을 지정하면 전송이 완료 됩니다.

procedure TForm1.BT_UploadClick(Sender: TObject);
begin
  IdFTP1.Host := Edit1.Text;
  IdFTP1.Username := Edit2.Text;
  IdFTP1.Password := Edit3.Text;

  if not IdFTP1.Connected then
    IdFTP1.Connect;

  IdFTP1.TransferType := ftBinary;

  IdFTP1.Put( 'c:\temp\Rose.png', 'aaa.png' ); //  local File name, Server save as file name
end;

 

IdFTP1 의 이벤트 메소드 에서는 Progress Bar 의 파일 전송 상태와 접속 상태를 모니터링 하기 위한 용도로 사용 합니다.

OnStatus, OnWork, OnWorkBegin, OnWorkEnd 4개의 이벤트를 생성하여 아래 소스와 같이 입력 합니다.

procedure TForm1.IdFTP1Status(ASender: TObject; const AStatus: TIdStatus; const AStatusText: string);
begin
  Memo1.Lines.Add(AStatusText); // Status of upload
end;

procedure TForm1.IdFTP1Work(ASender: TObject; AWorkMode: TWorkMode;  AWorkCount: Int64);
var
  tempbar: TProgressBar;
begin
  Memo1.Lines.Add('Uploading... ' + IntToStr(Integer(AWorkMode)) +
    IntToStr(AWorkCount));
  tempbar := ProgressBar2;
  if AWorkMode = wmRead then
    tempbar := ProgressBar2;
  tempbar.Position := AWorkCount;
  Application.ProcessMessages;
end;

procedure TForm1.IdFTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;  AWorkCountMax: Int64);
var
  tempbar: TProgressBar;
  aMax: Integer;
begin
  tempbar := ProgressBar2;
  aMax := AWorkCountMax;
  if AWorkMode = wmRead then
  begin
    tempbar := ProgressBar2;
    aMax := fDownloadBytes;
  end;
  tempbar.Position := 0;
  tempbar.Max := aMax;
end;

procedure TForm1.IdFTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
var
  tempbar: TProgressBar;
begin
  tempbar := ProgressBar2;
  if AWorkMode = wmRead then
    tempbar := ProgressBar2;
  tempbar.Position := tempbar.Max;
end;

 

이와 같은 방법으로 파일 전송 시 상태를 표시 할 수 있습니다.

 

image.png

이 댓글 링크
다른 사이트에 공유하기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 토픽(기고/질문)에 답하기

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.