У меня есть следующий код в моем бэкэнде Springboot
@GetMapping(value = "/stream", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public ResponseEntity<StreamingResponseBody> stream() {
File file = new File("C:\\test\\test.mp3");
try {
InputStream is = new FileInputStream(file);
StreamingResponseBody resp = outputStream -> {
IOUtils.copy(is, outputStream);
};
return ResponseEntity.ok()
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.contentLength(file.length())
.body(resp);
} catch(Exception e) {
e.printStackTrace();
}
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(null);
}
Я пытаюсь использовать его в моем приложении angular, как это
HTML
<p>{{ content }}</p>
Машинопись
ngOnInit(): void {
const header = new HttpHeaders().set('Accept', 'application/octet-stream');
this.http.get('http://localhost:8080/stream', {headers: header}).subscribe(
(res: any) => {
this.content = JSON.stringify(res);
},
(err: any) => {
this.content = JSON.stringify(err);
}
);
}
Однако, если я не укажу responseType: 'text'
для метода get, я получу только ошибку. Также я попытался указать responseType как blob и arraybuffer и указал несколько комбинаций observe: body|response|events
. На странице отображается только {}
. Не уверен, что здесь не так.
Я пытался подписаться на этот пост , но не очень полезен. Кто-нибудь может пролить свет на это? Заранее спасибо.