#scala #akka-stream #akka-http
#scala #акка-стрим #акка-http
Вопрос:
Я получаю a Multipart/FromData
в качестве сервера. Этот запрос содержит Source[Multipart.FormData.BodyPart, Any]
, и каждый Multipart.FormData.BodyPart
содержит Source[ByteString, Any]
внутри. Я могу установить размер буфера. Но это измеряется количеством элементов. Как я могу рассчитать размер каждого элемента ByteString(размер пакета)? Мне нужно рассчитать весь размер буфера в байтах.
entity(as[Multipart.FormData]) { formData =gt; formData .parts // Source[Multipart.FormData.BodyPart, Any] .flatMap { bodyPart =gt; bodyPart.entity.dataBytes.buffer(???, OverflowStrategy.backpressure) // Source[ByteString, Any] } }
Комментарии:
1. Пожалуйста, добавляйте
scala
теги к своим вопросам в будущем. Akka может использоваться как в java, так и в scala. Таким образом, этот тег является обязательным
Ответ №1:
Неясно, какова здесь мотивация, но buffer
двоюродный batchWeighted
брат, скорее всего, будет тем, чего вы хотите.
bodyPart.entity.dataBytes .batchWeighted[ByteString]( max = 1024, // bytes costFn = { bs: ByteString =gt; bs.length }, seed = { _: Any =gt; ByteString.empty } ) { _ _ }
(Не проверял это: мой мысленный компилятор говорит: «Выглядит хорошо!»)