服务端传输文件设置客户端下载需要的Content-Length

编程知识 更新时间:2023-04-05 06:41:48

问题

最近项目在做一个app在线升级的功能,由于公司没有OSS存储,也只有一个文件所以存到数据库中,客户端请求下载需要Content-Length 属性去显示下载进度,服务端设置了Content-Length  但是到服务器上就变成了 Transfer-Encoding: chunked,

 

解决

服务端关键代码

           InputStream bis = appVersion.getApp();
            byte[] buff = new byte[bis.available()];
            bis.read(buff);
            bis.close();
            // 清空response
            response.reset();
            response.setContentType("application/octet-stream");
            // 设置文件大小
            response.addHeader("Content-Length", String.valueOf(bis.available());
            response.addHeader("Content-Disposition", "attachment;filename=" + "dist.zip");
            os = response.getOutputStream();
            os.write(buff);
            os.flush();
            os.close();

需要修改tomcat的server.xml的compression 为off不进行压缩,注意需要衡量项目是否需要压缩的东西比较多

compression:指定是否对响应的数据进行压缩。off:表示禁止压缩、on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为off

 

我们来看下修改前后的对比:

修改前

tomcat的server.xml中配置compression="on 或 force",会启用gzip,即使服务端设置了Content-Length,响应报文中也会变为Transfer-Encoding: chunked

F12看到的返回的Response

修改后

tomcat的server.xml中配置compression="off",不启用gzip时,响应报文中有Content-Length

F12看到的返回的Response

 

更多推荐

服务端传输文件设置客户端下载需要的Content-Length

本文发布于:2023-04-05 06:41:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/c295144d76f69534524b4489ca44b1a4.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:服务端   客户端下载   传输文件   Length   Content

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 45337文章数
  • 14阅读数
  • 0评论数