Tôi phải gọi một dịch vụ web cung cấp cho tôi nội dung của tệp nhị phân. Tôi chỉ muốn cung cấp nội dung tương tự cho người gọi của bộ điều khiển của tôi:Phát: Phản hồi webservice nhị phân
val blobPromise = WS.url("http://url/to/webservice/file.txt").get()
Async {
blobPromise.map(f => Ok(f.body))
}
Thao tác này cho tệp văn bản, nhưng tệp nhị phân sẽ bị hỏng. Những gì tôi đang làm sai ở đây? (Có lẽ đó là số f.body
mã hóa kết quả nhị phân từ webservice thành Chuỗi? Nhưng làm cách nào tôi có thể lấy dữ liệu thô?)
Tôi biết, đó không phải là cách tốt cho tệp lớn - tôi đã đọc trong tài liệu Play khoảng Streaming HTTP responses, nhưng có vẻ phức tạp đối với tôi như một người mới bắt đầu với khung chơi.
Cảm ơn bạn rất nhiều, cả hai giải pháp với công việc 'f.ahcResponse.getResponseBodyAsBytes' giờ đây cũng có dữ liệu nhị phân. Các chức năng streaming dường như dễ dàng hơn tôi đã nghĩ ... :-) – Sonson123
Điều này không chặn? InputStreams thường làm .... –
Trong thực tế nó không chặn khi bạn đọc từ nó ... nhưng chỉ vì nó được đọc tất cả vào bộ nhớ đầu tiên. Để tránh điều đó, bạn sẽ phải sử dụng dạng 'get()' quá tải lấy đối số hàm người tiêu dùng: 'get [A] (consumer: (ResponseHeaders) ⇒ Iteratee [Array [Byte], A])' –