[Delphi] 델파이 DataSnap 이미지 전송

    728x90

    안녕하세요

    로로봉입니다 : )

    델파이 Datasnap에서 이미지 전송으로 많은 실패를 겪다 해결해보았습니다.

    우선 TBitmap이나 TMemoryStream과 같은 TStream 자체로 전송을 해보려고 했으나 여러가지 오류와 문제로 인해 전송이 안되는 것으로 확인 됐습니다.

    그래서 해결한 방법은 EncodeBase64 함수와 DecodeBase64 함수를 이용해 String으로 변환하여 전송 후 다시 변환하여 저장하는 방법으로 해결하였습니다.

    실제 구현된 부분을 알아보도록 하겠습니다.

    Base64 함수를 사용하기 위해서 uses 절에 아래와 같이 추가해줍니다.

    uses
      EncdDecd;

    제가 구현한 부분은 FMX 모바일인 안드로이드와 iOS (클라이언트)에서 앨범에서 선택된 이미지 파일을 서버로 전송하는 것이였습니다.

    앨범에서 넘어온 TBitmap을 아래 소스와 같이 서버로 전송하였습니다.

    var
      memTmp : TMemoryStream;
      usData : String;
    begin
      memTmp := TmemoryStream.Create;
    
      // 이미지 파일 MemoryStream에 저장
      TBitmap.SaveToStream(memTmp);
      memTmp.Position := 0;
    
      // MemoryStream을 String으로 변환
      usData := EncodeBase64(memTmp.Memory, memTmp.Size);
      
      // DataSnap 서버로 전송
      // ...
    end;

    DataSnap 서버로 전송하는 부분은 서버에 매개변수를 String으로 받아들이는 함수를 선언후에 보내면 됩니다.


    방법은 아래 포스팅에서 확인 가능합니다.

     

    델파이 Datasnap 서버 클라이언트 통신 방법

    데이터 스냅 서버의 접속 방법은 간단합니다. TFDConnection 컴포넌트의 DriverID를 ‘DS’로 설정해주면 됩니다. IP 주소는 Server에 입력하고 사용 포트는 Port 파라미터로 입력하면 됩니다. 테스트로 192

    rorobong.tistory.com

    서버측에 선언한 함수로 Base64로 변환된 데이터가 전송되면 아래와 같이 TBytes로 변환 후에 MemoryStream에 옮겨 저장해주면 됩니다.

    var
      memTmp : TMemoryStream;
      bytes : TBytes;
    begin
      memTmp := TMemoryStream.Create;
      bytes := DecodeBase64(usBase64);
    
      if nil <> bytes then
        memTmp.WriteBuffer(bytes[0], Length(bytes));
    
      memTmp.SaveToFile(저장 파일 경로);
    end;

    하면서 잘 안되시거나 어려운 점은 댓글 달아주시면 성실히 답변 드리겠습니다. ^^

    이것으로 데이터스넵 이미지 전송을 마치겠습니다.

     

    좋아요 ♥ + 구독 부탁드립니다. : )

    728x90
    반응형

    댓글