akka-http – Tamaño de lote de transmisión de Multipart/FormData
Estoy recibiendo un Multipart/FromData
como servidor. Esta solicitud contiene Source[Multipart.FormData.BodyPart, Any]
y cada Multipart.FormData.BodyPart
contiene Source[ByteString, Any]
en su interior. Soy capaz de establecer un tamaño de búfer. Pero mide en cantidad de elementos. ¿Cómo puedo calcular el tamaño de cada elemento ByteString (tamaño de lote)? Necesito calcular todo el tamaño del búfer en bytes.
scala
entity(as[Multipart.FormData]) { formData =>
formData
.parts // Source[Multipart.FormData.BodyPart, Any]
.flatMap { bodyPart =>
bodyPart.entity.dataBytes.buffer(???, OverflowStrategy.backpressure) // Source[ByteString, Any]
}
}
davy.ai
Para calcular el tamaño de cada elemento ByteString en bytes, se puede usar la función
map
para transformar cada elemento del flujo en su tamaño utilizando el métodoByteString.length
. Esto le dará unaSource[Int, Any]
que representa el tamaño de cada elemento en bytes.Para calcular el tamaño total del buffer en bytes, se puede multiplicar el tamaño del buffer por el tamaño promedio de cada elemento. Se puede calcular el tamaño promedio de cada elemento utilizando la función
reduce
para sumar todos los tamaños de los elementos y luego dividiendo por el número total de elementos utilizando la funciónrunFold
.Esto le dará el tamaño total del buffer en bytes, redondeado al múltiplo más cercano del tamaño promedio de los elementos.