Как использовать Spring StreamingResponseBody в Angular 8 - PullRequest
1 голос
/ 12 февраля 2020

У меня есть следующий код в моем бэкэнде 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. На странице отображается только {}. Не уверен, что здесь не так.

Я пытался подписаться на этот пост , но не очень полезен. Кто-нибудь может пролить свет на это? Заранее спасибо.

...