webentwicklung-frage-antwort-db.com.de

Wie kann ich auf den Angular 2 http-Antworttext zugreifen, ohne ihn in String oder JSON zu konvertieren?

Ich möchte eine REST Antwort in einen Blob kopieren, kann jedoch keine Antwort kopieren, da blob() und arrayBuffer() in der noch nicht implementiert wurden Antwortobjekt: Der Antworttext ist eine private Variable.

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

Gibt es eine Lösung, die ich verwenden kann, bis diese Methoden implementiert werden?

23
sschueller

Es gibt eine viel einfachere Lösung, um auf den Body als String zuzugreifen, die ich nirgendwo dokumentiert gesehen habe:

let body = res.text()
48
StudioLE

Addon zu @StudioLE. Sie können die Methode json () verwenden, um Daten als json zurückzugeben.

let body = res.json()
10
SKL

Da ich diese Frage gefunden habe, als ich auf dasselbe Problem gestoßen bin (und Angulars Dokumentation ab heute nicht aktualisiert wurde), können Sie jetzt Folgendes verwenden:

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

Eine andere Problemumgehung, wenn Sie aus irgendeinem Grund eine alte Version von Angular 2 verwenden, ist:

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

legen Sie den responseType der Anforderungsoptionen fest. Dadurch funktioniert die response.blob () -Methode.

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

Ich kann keine anderen Lösungen sehen, bevor die folgende PR zusammengeführt wurde:

Während Sie einen Übersetzungsfehler haben, kann das Feld zur Laufzeit verwendet werden ...

1