Delphi Xe10 Datasnap:图像功能发送不起作用

时间:2016-02-09 15:46:22

标签: rest delphi jpeg datasnap delphi-10-seattle

我的send函数有问题。我的程序在Xe8中正确运行,但升级到Xe10后,我遇到了一个问题:加密?

我创建了一个简单的项目数据,用juste这样的窃听函数

procedure TServerMethods1.test3;
VAR
  a : string;
begin
  a := LoadFileToStr('C:\demo\Bitmaps\Mazak_Matrix.JPG');



  GetInvocationMetadata.ResponseContentType :=  'image/jpeg';
  GetInvocationMetadata.ResponseCode := 200;
  GetInvocationMetadata().ResponseContent := a;
  GetInvocationMetaData.CloseSession := True;


end;

功能LoadFileToStr

function LoadFileToStr(const FileName: string): AnsiString;
var
  FileStream : TFileStream;
begin
  FileStream:= TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
   if FileStream.Size>0 then
   begin
    SetLength(Result, FileStream.Size);
    FileStream.Read(Pointer(Result)^, FileStream.Size);
   end;
  finally
   FileStream.Free;
  end;
end;

实际上,数据是正确的,直到

GetInvocationMetadata().ResponseContent := a;

responseContent会破坏数据,就像您在十六进制编辑器中看到的那样。一个例子。整个文件没有损坏,只有几个字符。

原始图片

original picture enter image description here

经服务器发送后

enter image description here Image sending by Rest server

有人遇到过同样的错误吗?如果直接进入有效的流,但它并不引起我的兴趣。

谢谢!

1 个答案:

答案 0 :(得分:0)

有同样的问题。尝试这样的事情。

procedure TAPI.GetFile(UID: string);
var
  LFS: TFileStream;
  I: Integer;
  LByte: Byte;
begin
  try
    LFS := TFileStream.Create('e:\image.jpg', fmOpenRead);
    for I := 0 to Pred(LFS.Size) do
    begin
      LFS.Read(LByte, 1);
      GetInvocationmetaData.ResponseContent := GetInvocationmetaData.ResponseContent + Char(LByte);
    end;
    GetInvocationmetaData.ResponseContentType := 'image/jpeg';    
  finally
    LFS.Free;
  end;  
end;