2017-04-04 28 views
2

我很努力地發送一個來自S3的Gzip文件的響應。我從S3下載文件作爲Array[Byte],然後我想將它傳遞給客戶端,並讓瀏覽器負責解壓縮。發送已經Gzip的有效負載到客戶端

要清楚,我沒有在Play中使用內置的gzipFilter,因爲數據已經被壓縮。

我有這個在我的控制器的動作:

s3DAO.getFile(id).map(bytes => Ok(bytes).as("application/gzip」)) 

在客戶端(使用郵差調試),該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

您是否嘗試使用其他HTTP客戶端,比如'curl'? – vdebergue

回答

3

我貼在Play Gitter Channel同樣的問題,找到問題的答案是設置Content-Typeoctet-stream,然後指定編碼爲gzip的內容:

Ok(bytes).as("application/octet-stream").withHeaders("Content-Encoding" -> "gzip") 
相關問題