2015-10-21 25 views
6

ja zdefiniował $resource do punktu końcowego API, która zwraca odpowiedź zawierającą kilka headers ale w funkcji transformResponse config większość nagłówków brakuje argumentu headersGetter funkcyjnego.

Jak mogę to naprawić?

Response nagłówku API

HTTP/1.1 201 Created 
Server: Apache-Coyote/1.1 
x-content-type-options: nosniff 
x-xss-protection: 1; mode=block 
Cache-Control: no-cache, no-store, max-age=0, must-revalidate 
Pragma: no-cache 
Expires: 0 
x-frame-options: DENY 
Access-Control-Allow-Origin: http://localhost:9000 
access-control-allow-methods: POST, PUT, GET, DELETE, OPTIONS 
access-control-allow-headers: Content-Type 
Access-Control-Allow-Credentials: true 
Content-Disposition: attachment; filename="testCall.pcap" 
FileName: testCall.pcap 
Content-Type: application/pcap 

transformResponse „s nagłówki

Pragma: no-cache 
Content-Type: application/pcap 
Cache-Control: no-cache, no-store, max-age=0, must-revalidate 
Expires: 0 

app.factory("MyService", function ($resource, ENV, _) { 
    return { 
     testCall: $resource(ENV.apiEndpoint + "/test-call", {}, { 
      launch: { 
       method: 'POST', 
       isArray: false, 
       headers:{'Accept':'application/octet-stream'}, 
       responseType: 'blob', 
       cache: false, 
       transformResponse: function(data, headers){ 
        var filename = headers('Content-Disposition'); //headers('FileName') 
        var contentType = headers('Content-Type'); 

        var file = new Blob([data], { 
         type: contentType 
        }); 

        var fileURL = URL.createObjectURL(file); 
        var a   = document.createElement('a'); 
        a.href  = fileURL; 
        a.target  = '_blank'; 
        a.download = filename; 
        document.body.appendChild(a); 
        a.click(); 
       } 
      } 
     }), 
     searchOptions: $resource(ENV.apiEndpoint + "//search-options") 
    }; 
}); 

Odpowiedz

11

Załóżmy robicie CORS nazywa, nagłówki odpowiedzi nie są narażone . Strona serwera musi dodać nagłówek odpowiedzi "Access-Control-Expose-Headers" w filtrze CORS.

np. Aby odczytać niestandardowy nagłówek odpowiedzi o nazwie "X-MY-HEADER1" i "X-MY-HEADER2" z Cors rozmowy, dodać nagłówka serwera

Access-Control-Expose-Headers: "X-MY-HEADER1, X-MY-HEADER2"

Zobacz odpowiedź od @nancoder na https://stackoverflow.com/a/23726352/4684232

+0

thks za twoją odpowiedź. Tak, jest to wywołanie CORS w poddomenie, ale powyższe nagłówki odpowiedzi to te otrzymane przez serwer Angular (dostałem je z Firebug). Więc dla mnie myślę, że _Angularna struktura oczyszcza_ niektóre z nich przed 'transformResponse' ... – gudepier

+1

+1 Człowieku, chciałem znać dokładną odpowiedź jak szaloną, natknąłem się na ten sam problem, gdy próbowałem przeczytać" Lokalizacja " nagłówek po utworzeniu zasobu w domenie krzyżowej RESTFull Api i pobranie identyfikatora z nagłówka Lokalizacja, dodając Nagłówek na serwerze załatwiła sprawę! Tks za wspaniałą odpowiedź. –

+0

w końcu udało mi się zdobyć mój token niestandardowy. dzięki Joe i Adriano. –

Powiązane problemy