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으로 받아들이는 함수를 선언후에 보내면 됩니다.
방법은 아래 포스팅에서 확인 가능합니다.
서버측에 선언한 함수로 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
반응형
'개발 정보 > 델파이' 카테고리의 다른 글
[Delphi] 델파이 현재 프로세스 스레드 수 얻기 (0) | 2021.06.11 |
---|---|
[Delphi] 델파이 윈도우10 메모리 사용량 관련 함수 (4) | 2021.06.10 |
[Delphi] 델파이 컴포넌트(Component) 설치 방법 (5) | 2021.05.27 |
[Delphi] 델파이 10.4 Sydney iOS AppStore 배포하기 (4) | 2021.04.24 |
[Delphi] 델파이 10.4 Sydney 윈도우 프로그램으로 폰트 설치 (0) | 2021.04.22 |
댓글