Devo generare un grande file al volo. Leggere il database e inviarlo al client. Ho letto alcuni documenti e ho fatto questoCome generare un grande flusso di dati al volo
val streamContent: Enumerator[Array[Byte]] = Enumerator.outputStream {
os =>
// new PrintWriter() read from database and for each record
// do some logic and write
// to outputstream
}
Ok.stream(streamContent.andThen(Enumerator.eof)).withHeaders(
CONTENT_DISPOSITION -> s"attachment; filename=someName.csv"
)
Im piuttosto nuovo a Scala, in generale, solo una settimana in modo da non guidare per la mia reputazione.
Le mie domande sono:
1) È questo il modo migliore? Ho trovato questo se ho un grande file, questo verrà caricato in memoria, e anche non so qual è la dimensione del chunk in questo caso, se invierà per ogni write()
non è conveniente.
2) Ho trovato questo metodo Enumerator.fromStream(data : InputStream, chunkedSize : int)
un po 'meglio perché ha una dimensione del blocco, ma non ho un inputStream perché sto creando il file al volo.
dimensioni Chunk è di default impostato a '1024 * 8'. Penso che la dimensione dipenda dalla tua scelta se vuoi inviare pezzi più grandi o più piccoli. – goral
@goral come fai a sapere che il blocco 'Enumerator.outputStream' di' 1024 * 8' ?? – nachokk
Non so di outputStream, stavi parlando del metodo 'fromStream' e delle specifiche che sono impostate come valore predefinito – goral