1. 程式人生 > >從Delphi REST伺服器返回影象並顯示在瀏覽器中

從Delphi REST伺服器返回影象並顯示在瀏覽器中

當你使用檔案流物件從Delphi的REST伺服器返回影象時,它不會正常顯示在瀏覽器中,如下例:

function TServerClass.Image: TFileStream;
begin
  Result := TFileStream.Create('pathtofile\image.png', fmOpenRead or fmShareDenyNone);
end;

這是因為Delphi REST伺服器總是將返回內容的型別設定為text/html,這就導致你返回其它型別時瀏覽器不能加以區分,這是一個bug,因為大多數的返回內容為json,這就意味著返回內容的型別應該為applicatilon/json。所幸在伺服器方法中我們可以改寫返回內容的型別。

為此你需要引用"Data.DBXPlatform"

單元,它包含一個名為GetInvocationMetadata的方法,它能夠訪問目前正在構建的返回響應物件,它返回一個TDSInvocationMetadata物件,它有一個名為ResponseContentType的屬性。設定這個屬性將會改寫HTTP響應容的頭部Content-Type的值。上面的例子可以改寫為

function TServerClass.Image: TFileStream;
begin
  Result := TFileStream.Create('pathtofile\image.png', fmOpenRead or fmShareDenyNone);
  GetInvocationMetadata.ResponseContentType := 'image/png';
end;

現在,返回的影象就可以在瀏覽器中正常顯示了。