web-dev-qa-db-fra.com

Comment puis-je avoir accès au corps de réponse http Angular 2 http sans le convertir en chaîne ou json?

Je voudrais copier une réponse REST dans un blob mais je ne peux pas en faire car blob() et arrayBuffer() n'ont pas encore été implémentées dans le Objet de réponse. Le corps de réponse est une variable privée.

...
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);
...

Existe-t-il une solution que je peux utiliser jusqu'à ce que ces méthodes soient mises en œuvre?

23
sschueller

Il existe une solution beaucoup plus simple pour accéder au corps sous forme de chaîne que je n'ai vu nulle part documentée:

let body = res.text()
48
StudioLE

Complément à @StudioLE. Vous pouvez utiliser la méthode json () pour renvoyer des données en tant que json.

let body = res.json()
10
SKL

Puisque j'ai trouvé cette question en rencontrant le même problème (et que la documentation d'Angular n'est pas mise à jour à ce jour), vous pouvez maintenant utiliser:

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

Une autre solution de contournement si, pour une raison quelconque, vous utilisez une ancienne version de Angular 2 est:

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

définissez le type de réponse des options de demande. Cela fera fonctionner la méthode 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;
    });
2
Andreas

Je ne vois aucune autre solution avant la fusion du PR suivant:

Alors que vous avez une erreur de compilation, le champ peut être utilisé lors de l'exécution ...

1
Thierry Templier