【问题标题】:Delphi Xe10 Datasnap : Image function sending not workingDelphi Xe10 Datasnap:图像功能发送不起作用
【发布时间】:2016-02-09 15:46:22
【问题描述】:

我的发送功能有问题。我的程序在 Xe8 中正常运行,但升级到 Xe10 后,我遇到了一个问题:加密?

我已经创建了一个简单的项目数据快照,其中包含类似的窃听功能

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 会破坏数据,就像您在十六进制编辑器上看到的那样。一个例子。整个文件没有损坏,只有几个字符。

原图

服务器发送后

有人遇到过同样的错误吗?如果直接进入一个有效的流,但我不感兴趣。

谢谢!

【问题讨论】:

  • 二进制数据不是字符串,这样处理。

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


【解决方案1】:

有同样的问题。试试这样的。

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多