无法通过Scala的播放中的TearrayOutputStream发送到浏览器

无法通过Scala的播放中的TearrayOutputStream发送到浏览器,scala,playframework,playframework-2.5,pivot4j,Scala,Playframework,Playframework 2.5,Pivot4j,我为尝试将Excel文件发送到浏览器的Scala编写了以下代码: val out = new ByteArrayOutputStream val exporter = new org.pivot4j.ui.poi.ExcelExporter(out) val renderer = new TableRenderer renderer.render(model, exporter);

我为尝试将Excel文件发送到浏览器的Scala编写了以下代码:

            val out = new ByteArrayOutputStream
            val exporter = new org.pivot4j.ui.poi.ExcelExporter(out)
            val renderer = new TableRenderer
            renderer.render(model, exporter);
            out.flush
            out.close
            Ok(out).withHeaders(
                  CONTENT_TYPE -> "application/vnd.ms-excel",
                  CONTENT_DISPOSITION -> s"attachment; filename = file.xlsx")
Ok
抛出编译错误:

◾无法将java.io.ByteArrayOutputStream的实例写入HTTP 答复。尝试定义一个可写的[java.io.ByteArrayOutputStream]


即使
ByteArrayOutputStream
属于输出类型,也无法写入。如何解决此问题?

请尝试在
out
上调用
toByteArray
,如下所示:

Ok(out.toByteArray).withHeaders(...)

提供“开箱即用”提供的可写的
列表。特别是,当您调用它编译的
toByteArray

时,应该会拾取一些内容,但它在运行时会抛出以下消息:
[warn]p.c.s.n.NettyModelConversion-在标头(application/vnd.ms excel)和附加到实体(application/octet stream)中设置的内容类型,忽略实体中的内容类型。若要删除此警告,请使用Result.as(…)设置内容类型,而不是手动设置标题。
我使用
Ok(out.toByteArray)
在没有标题的情况下工作。如果您仍然希望设置
内容类型
标题,请尝试将
设置为(“应用程序/vnd.ms excel”)
而不是
。使用标题