Я внедряю API доставки файлов AWS S3. Я вынужден передавать байты из S3ObjectInputStream S3 в браузер. У нас есть вариант использования, когда обслуживать файл с облачным фронтом не вариант (в основном локальная разработка)
У меня есть InputStream, поэтому наиболее очевидным было бы использовать Ok.chunked с Enumerator.fromStream(), но Enumerator.fromStream() имеет очень четкое предупреждение о том, что поток не должен быть медленным. Я предполагаю, что AWS S3ObjectInputStream, вероятно, является одним из самых медленных потоков.
def fromStream(input: InputStream, chunkSize: Int = 1024 * 8)
(implicit ec: ExecutionContext): Enumerator[Array[Byte]]
Create an enumerator from the given input stream.
This enumerator will block on reading the input stream, in the default iteratee
thread pool. Care must therefore be taken to ensure that this isn't a
slow stream. If using this with slow input streams, consider setting the value
of iteratee-threadpool-size to a value appropriate for handling the blocking.
Поэтому мне было интересно, какой самый безопасный способ избежать голодания потока и получить потоковую передачу файла в браузер, не удерживая весь файл в памяти.
Есть ли другой способ получить Enumerator (или что-то, что мы можем отправить в результате) из InputStream?