Подтвердить что ты не робот

Как я могу получить доступ к телу ответа Angular 2 без преобразования его в строку или json?

Я хотел бы скопировать ответ REST в blob, но я не могу это сделать, потому что blob() и arrayBuffer() еще не были реализованы в объекте Response. Тело ответа является частной переменной.

...
return this.http.get(url, {params: params, headers: headers})
     .map(res => {   
        // can't access _body because it is private
        // no method appears to exist to get to the _body without modification             
        new Blob([res._body], {type: res.headers.get('Content-Type')});
     })
     .catch(this.log);
...

Есть ли решение, которое я могу использовать до тех пор, пока эти методы не будут реализованы?

4b9b3361

Ответ 1

Существует гораздо более простое решение для доступа к телу в виде строки, которую я не видел нигде:

let body = res.text()

Ответ 2

Addon to @StudioLE. Вы можете использовать метод json() для возврата данных как json.

let body = res.json()

Ответ 3

Поскольку я нашел этот вопрос во время работы с той же проблемой (и Angular документация не обновляется с сегодняшнего дня), вы можете теперь использовать:

let blob = new Blob([response.arrayBuffer()], { type: contentType });

Другим обходным решением, если вы по какой-то причине находитесь на старой версии Angular 2, является:

let blob = new Blob([(<any> response)._body], { type: contentType });

Ответ 4

установите responseType запросаопции. Это заставит метод response.blob() работать.

let headers = this.getAuthorizationHeader();
headers.append("Accept", "application/octet-stream");
return this.http
    .get(url, new RequestOptions({ headers: headers, responseType: ResponseContentType.Blob }))
    .map((res: Response): Blob => {
        return res.ok ? res.blob() : undefined;
    });

Ответ 5

Я не вижу других решений до объединения следующего PR:

Если у вас есть ошибка компиляции, это поле можно использовать во время выполнения...