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?
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()
Complément à @StudioLE. Vous pouvez utiliser la méthode json () pour renvoyer des données en tant que json.
let body = res.json()
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 });
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;
});
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 ...