0

Render-Renderer Ich bin neu zu spielen Framework. Ich habe ein Szenario, in dem die Play-Anwendung die Ergebnismenge von einem Data-Warehouse abrufen und an den Client zurückgeben sollte. Ich habe einen Arbeitscode, der ByteArrayOutputStream und Chunked Transfer-Codierung verwendet, um die Aufgabe zu erfüllen. Es ist unten angegeben,Wie Excel-Datei von dynamischen Ergebnis-Set im Play-Framework zum Download ohne Verwendung von Server-Speicher

val responseStream: java.io.ByteArrayOutputStream = new ByteArrayOutputStream() 


val sheetOne = Workbook { 

    ... 

} 

val workbookImpure = new WorkbookImpure(sheetOne) 
workbookImpure.saveToStream(responseStream) 



Ok.chunked(
    Enumerator(responseStream.toByteArray).andThen(Enumerator.eof) 
).as("application/vnd.ms-excel").withHeaders("Content-Disposition" -> s"attachment; filename=*filename*.xls")  

ich die Excel-Arbeitsmappe aus dem Ergebnis konstruieren gesetzt und verwenden ByteArrayOutputStream es als file.But zu schreiben das Problem ist, dass der ByteArrayOutputStream Speicher verwendet.

Ich würde gerne wissen, ob es einen Weg im Spiel-Framework gibt, Dateien zum Download (mit Ok.chunked()) ohne Speicher zu rendern.

Danke.

Antwort

0

Technisch verwendet alles Speicher, aber einige Lösungen verwenden weniger als andere. Sie sollten also versuchen, Akka Streams zu verwenden, damit Sie Bytes direkt an den Client übergeben können, ohne eine ganze Datei im Speicher zu erstellen.

Verwandte Themen