Ao receber uma request onde no body tem um binário o middleware gera uma exception
exception class EEncodingError with message "No mapping for the Unicode character exists in the target multi-byte code page"
Exemplo de código:
No Header da request definir Content-Type como application/octet-stream
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
Horse,
Horse.OctetStream,
Horse.Logger,
Horse.Logger.Provider.Console,
Horse.Logger.Provider.LogFile,
System.SysUtils,
System.Classes;
var
LLogConsole: THorseLoggerConsoleConfig;
LLogFile: THorseLoggerLogFileConfig;
begin
LLogConsole := THorseLoggerConsoleConfig.New.SetLogFormat('${request_clientip} [${time}] ${response_status}');
THorseLoggerManager.RegisterProvider(THorseLoggerProviderConsole.New());
LLogFile := THorseLoggerLogFileConfig.New
.SetLogFormat('${request_clientip} [${time}] ${response_status}');
THorseLoggerManager.RegisterProvider(THorseLoggerProviderLogFile.New());
THorse.Use(OctetStream);
THorse.Use(THorseLoggerManager.HorseCallback);
THorse.Get('/stream',
procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
var
LStream: TFileStream;
begin
LStream := TFileStream.Create(ExtractFilePath(ParamStr(0)) + 'horse.pdf', fmOpenRead);
Res.Send(LStream);
end);
THorse.Post('/stream',
procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
var
LStream: TMemoryStream;
begin
LStream := Req.Body;
LStream.SaveToFile(ExtractFilePath(ParamStr(0)) + 'horse.pdf');
Res.Status(THTTPStatus.Created);
end);
THorse.Listen(9000,
procedure(Horse: THorse)
begin
Writeln(Format('Server is runing on %s:%d', [Horse.Host, Horse.Port]));
Readln;
end);
end.