我正在努力发送一个来自S3的Gzip文件的响应。我正在从S3下载文件作为Array[Byte]
,然后我想将其传递给客户端并让浏览器负责解压缩。
要清楚,我没有在Play中使用内置的gzipFilter,因为数据已经压缩了。
我在控制器的操作中有这个:
s3DAO.getFile(id).map(bytes => Ok(bytes).as("application/gzip”))
在客户端上(使用Postman进行调试),Content-Type
标题设置为application/gzip
,但正文看起来像这样:
���[�W�$��j3��-��/�-HOz��ƒ@�HȄ%D���E�Л��%�=P�����$�*v7��X����������=x|��w������챕8�,��X���
我知道这些字节代表了一个有效的有效负载,因为如果我在控制器动作中插入自己解压缩的代码,我可以将它打印出来:
val zipInputStream = new GZIPInputStream(new ByteArrayInputStream(bytes))
val rawString = scala.io.Source.fromInputStream(zipInputStream, Charsets.UTF_8.name).mkString
println(rawString) // I can see my payload
我不知道如何进一步调试这个
答案 0 :(得分:3)
我在Play Gitter Channel上发布了相同的问题,发现答案是将Content-Type
设置为octet-stream
,然后将编码指定为gzip:
Ok(bytes).as("application/octet-stream").withHeaders("Content-Encoding" -> "gzip")