Muszę zadzwonić do usługi sieciowej, która daje mi zawartość pliku binarnego. Ja po prostu chcę dać tę samą zawartość z powrotem do wywołującego mojego kontrolera:Odtwarzanie: Odpowiedź Binary Webservice
val blobPromise = WS.url("http://url/to/webservice/file.txt").get()
Async {
blobPromise.map(f => Ok(f.body))
}
To działa dla plików tekstowych, ale pliki binarne zostanie uszkodzona. Co robię źle tutaj? (Może to jest kod f.body
, który koduje wynik binarny z usługi sieci Web do łańcucha znaków ?, ale jak mogę uzyskać surowe dane?)
Wiem, to nie jest dobry sposób na duże pliki - czytałem w dokumentach Play około Streaming HTTP responses, ale wydaje mi się to skomplikowane dla mnie jako początkującego ze strukturą Play.
Dziękuję bardzo, oba rozwiązania z 'f.ahcResponse.getResponseBodyAsBytes' działają teraz również z danymi binarnymi. Funkcja przesyłania strumieniowego wydaje się łatwiejsza niż myślałem ... :-) – Sonson123
Czy to nie blokuje? InputStreams zwykle robią .... –
W rzeczywistości nie blokuje się, gdy czytasz z niego ... ale tylko dlatego, że najpierw jest on wczytany do pamięci. Aby tego uniknąć, musiałbyś użyć przeciążonej formy 'get()', która przyjmuje argument funkcji konsumenta: 'get [A] (konsument: (ResponseHeaders) ⇒ Iteratee [Array [Byte], A])' –