在喷涂中发出静态文件的问题

时间:2015-06-25 07:23:43

标签: scala spray

我在使用spray 1.3.2从他的核心看起来像这样的路由提供静态文件时遇到了一些问题:

ctx.withHttpResponseHeadersMapped(hm => hm ++ List(`Content-Disposition`("attachment",
   Map(("filename", attachment.name),
   `Content-Length`(attachment.bytes.length)))
   .withHttpResponseEntityMapped { e =>
     HttpEntity(new ContentType(
       MediaTypes.forExtension(attachment.name.split('.').last.toLowerCase).getOrElse(MediaTypes.`application/octet-stream`), None), e.data)  //also tried with just MediaTypes.`application/octet-stream` as default
   }
   .complete(attachment.bytes)

其中attachment.name只是一个字符串,attachment.bytes是一个数组[Byte]。

通过这种方式,我可以从浏览器界面下载Array [Byte]表示的文件,问题是当文件采用excel格式(xls,xlsx)时,下载的文件似乎在损坏期间被破坏了这个过程并没有打开。
奇怪的是,对于那些损坏的文件,下载的副本的大小比原始文件大,并且在浏览器控制台中可以注意到传输编码被设置为在移除Content-Length头的情况下分块。
删除特定媒体类型无效。

我找不到一个解决方案,可以使用这段代码使这些excel文件顺利运行。

我不明白传输编码设置为分块的位置,文件大小似乎不是原因,因为它可以为其他格式(pdf,txt,jpeg,...)提供大文件而不会出现此问题

如果有人可以暗示正在发生的事情,我将不胜感激,谢谢。

0 个答案:

没有答案