Указана служба API в Swagger 2.0, например, так:
/example/my-file:
get:
summary: Get this file
tags:
- MyFile
produces:
- application/octet-stream
responses:
200:
description: OK
schema:
type: file
400:
$ref: "#/responses/badRequest"
404:
$ref: "#/responses/notFound"
500:
$ref: "#/responses/internalServerError"
Реализована и может выполнять GET-запрос Postman, который корректно возвращает содержимое файла. Я использовал ng-swagger-gen для генерации вызова службы angular:
getExampleFileResponse(params: ExampleService.GetExampleFileParams): __Observable<__StrictHttpResponse<Blob>> {
let __params = this.newParams();
let __headers = new HttpHeaders();
let __body: any = null;
let req = new HttpRequest<any>(
'GET',
this.rootUrl + `/example/my-file`,
__body,
{
headers: __headers,
params: __params,
responseType: 'blob'
});
return this.http.request<any>(req).pipe(
__filter(_r => _r instanceof HttpResponse),
__map((_r) => {
return _r as __StrictHttpResponse<Blob>;
})
);
}
getExampleFile(params: ExampleService.GetExampleFileParams): __Observable<Blob> {
return this.getExampleFileResponse(params).pipe(
tap(_r => console.log(_r)),
__map(_r => _r.body as Blob)
);
}
Когда я звоню с клиента angular:
this.ExampleService.getExampleFile(param)
.subscribe((f) => {
saveAs(f, 'example.txt')
});
, я получаю BLOB-объект, состоящий из 3 байта: {} \ n Не содержимое файла. Кажется, что-то в сервисе работает неправильно. Если я добавлю tap () в службу в ответе, то увижу, что ответ доставляет BLOB-объект с этими тремя байтами и типом контента: application / json, а не application / octet-stream, который я указал в API .