J'écris le classeur Excel créé à l'aide Apache POI à l'objet de réponse directement comme suit sans créer un fichier:Télécharger Excel xlsx au lieu de format zip dans Scalatra
val outputStream: ByteArrayOutputStream = new ByteArrayOutputStream()
workbook.write(outputStream)
ExcelOk(response.getOutputStream.write(outputStream.toByteArray))
Mais une fois que la taille de la la réponse dépasse 8 Ko, il commence à être téléchargé en tant que fichier zip
dans Chrome et octet-stream
dans FireFox.
Mon objet ExcelOk
ressemble à ceci:
object ExcelOk {
def apply(body: Any = Unit, headers: Map[String, String] = ExcelContentType, reason: String = "") = {
halt(ActionResult(responseStatus(200, reason), body, headers))
}
}
et mon ExcelContentType
(c.-à-têtes de réponse) est comme ci-dessous:
val ExcelContentType = Map(
"Access-Control-Allow-Credentials" -> "true",
"Access-Control-Allow-Methods" -> "GET, PUT, POST, DELETE, OPTIONS",
"Access-Control-Allow-Origin" -> "*",
"Access-Control-Max-Age" -> "1728000",
"Content-type" -> "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"Content-disposition" -> "attachment; filename=excel_report.xlsx"
)
J'ai même essayé d'ajouter "Transfer-Encoding" -> "chunked"
à la liste d'en-tête mais ne fonctionne pas.
J'ajouté cet extrait dans mon dossier web.xml
aussi bien mais il n'a pas aidé non plus:
<mime-mapping>
<extension>xlsx</extension>
<mime-type>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</mime-type>
</mime-mapping>
Toute aide concernant ce serait utile. Notez que ce comportement est observé uniquement lorsque la taille de la réponse dépasse un certain seuil.