Я реализую API доставки файлов AWS S3. Я вынужден передать байты из S3SbjectInputStream в браузер. У нас есть прецедент, обслуживающий файл с облачным экраном, не является вариантом (в основном локальная разработка)Play Framework [2.2-scala]: создание перечислителя из медленного InputStream
У меня есть 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?
Другой случай использования будет пользовательские разрешения на объекты в S3, то вам нужно по-прежнему передавать байты ... – Jaap
Возможно, вы можете использовать unoldM? –
Вы нашли решение? – nachokk