解决response.setHeader设置下载文件名无效的问题

目录
  • response.setHeader设置下载文件名无效
    • 解决
  • response.setheader无效的原因之一
    • 原因是
    • 输出缓冲区

response.setHeader设置下载文件名无效

response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=down.xls");

设置后,点击下载的文件名无效,是方法的名字

解决

将以上的代码放到流的前面即可。

response.setheader无效的原因之一

最近搭建架构的时候,使用了HandlerInterceptorAdapter,

在afterCompletion 或 postHandle中使用了response.setHeader("token", token);

初衷是想在方法执行完成后,把新的jwt令牌返回给调用方。

但是实际返回中获取不到set的值。

原因是

response的header设置,要在缓冲区装入响应内容之前,http的协议是按照响应状态行、各响应头和响应正文的顺序输出的,后写的header就不生效了。所以在preHandle里写header就可以生效了的。

输出缓冲区

1、Servlet程序输出的HTTP消息的响应正文首先被写入到Servlet引擎提供的一个输出缓冲区中,直到输出缓冲区被填满或者Servlet程序已经写入了所有的响应内容,缓冲区中的内容才会被Servlet引擎发送到客户端。

2、使用输出缓冲区后,Servlet引擎就可以将响应状态行、各响应头和响应正文严格按照HTTP消息的位置顺序进行调整后再输出到客户端。

3、如果在提交响应到客户端时,输出缓冲区中已经装入了所有的响应内容,Servlet引擎将计算响应正文部分的大小并自动设置Content-Length头字段。

4、如果在提交响应到客户端时,输出缓冲区中装入的内容只是全部响应内容的一部分, Servlet引擎将使用HTTP 1.1的chunked编码方式(通过设置Transfer-Encoding头字段来指定)传输响应内容。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Response.AddHeader案例讲解

    Response.AddHeader使用实例 1.文件下载,指定默认名 Response.AddHeader("content-type","application/x-msdownload"); // 限制类型 Response.AddHeader("Content-Disposition","attachment;filename=文件名称.rar");// 下载后的文件名称 2.刷新页面 Response.AddHead

  • java中response对象用法实例分析

    本文实例讲述了java中response对象用法.分享给大家供大家参考,具体如下: <jsp:forward>动作元素用于运行时在服务器端结束当前页面的执行,并从当前页面转向指定页面. 使用response对象的setHeader()方法可以设置页面的自动刷新时间间隔.实现每隔60秒重新加载本页面的语句为: 复制代码 代码如下: response.setHeader("refresh",60); 而实现3秒后浏览器加载新页面http://www.jb51.net的语句为:

  • response.setHeader各种用法详解

    一秒刷新页面一次 response.setHeader("refresh","1"); 二秒跳到其他页面 response.setHeader("refresh","2;URL=otherPagename"); 没有缓存: response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control&qu

  • 解决response.setHeader设置下载文件名无效的问题

    目录 response.setHeader设置下载文件名无效 解决 response.setheader无效的原因之一 原因是 输出缓冲区 response.setHeader设置下载文件名无效 response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=down.xls")

  • vue中如何下载excel流文件及设置下载文件名

    概述 导出excel需求,当点击下载模板或下载反馈结果,axios发起后端接口请求,返回的数据获取 response 时出现乱码,如图: 现总结如下几种处理方法. 1.通过 url 下载 即后端提供文件的地址,直接使用浏览器去下载 通过window.location.href = 文件路径下载 window.location.href = `${location.origin}/operation/ruleImport/template` 通过 window.open(url, '_blank'

  • 解决Android popupWindow设置背景透明度无效的问题

    有的时候当我们使用popwindow时将当前的activity当做View传给其他fragment使用时会导致我们设置背景变暗效果失效,导致这个原因的问题是因为我们传view后当弹出popupwindw的时候已经不再当前的activity了,所以会显示无效 因此在设置的时候我们这样处理: public void backgroundAlpha(float bgAlpha) { //MApp.getInstance().getMainActivity()就是你想要点击时要显示的主activity

  • response文件流输出文件名中文不显示的解决

    目录 文件流输出文件名中文不显示 使用如下方法没有解决 解决方法 response下载时中文文件名乱码 文件流输出文件名中文不显示 response返回文件流 用response.setHeader(“Content-disposition”, “attachment; filename=”+fileName);结果中文名称以“—”下滑下显示. 使用如下方法没有解决 response.setCharacterEncoding("UTF-8"); response.setContentT

  • Android使用TextView,设置onClick属性无效的解决方法

    Android在布局文件中为View提供了onClick属性,使用方法如下: <TextView android:id="@+id/user" android:layout_width="@dimen/px_171" android:layout_height="fill_parent" android:onClick="iconClickListener" android:clickable="true&qu

  • PHP中file_exists()判断中文文件名无效的解决方法

    本文实例讲述了PHP中file_exists()判断中文文件名无效的解决方法.分享给大家供大家参考.具体方法如下: php中判断文件是否存在我们会使用file_exists函数或is_file函数,但在使用file_exists时如果你文件名或路径是中文在uft8编码文档时是无效.本文就来解决此问题,下面我们一起来看看. 定义和用法: file_exists() 函数检查文件或目录是否存在. 如果指定的文件或目录存在则返回 true,否则返回 false. 例子1 复制代码 代码如下: <?ph

  • 解析如何在PHP下载文件名中解决乱码的问题

    通过把Content-Type设置为application/octet-stream,可以把动态生成的内容当作文件来下载,相信这个大家都会.那么用Content-Disposition设置下载的文件名,这个也有不少人知道吧.基本上,下载程序都是这么写的: 复制代码 代码如下: $filename = "document.txt";header('Content-Type: application/octet-stream');header('Content-Disposition: a

  • vue中设置height:100%无效的问题及解决方法

    在vue.js中写新的components的时候,如果在新页面中的模板中设置height:100%的时候一直无效. App.vue文件 <template> <div id="app"> <router-view/> </div> </template> <script> export default { name: 'App' } </script> <style> #app { font

  • node.js中的http.response.setHeader方法使用说明

    方法说明: 设置头文件信息. 如果将要发送的信息已包含头文件,执行该方法后头文件的值将被改写. 如果一个头文件需要传递多个值,可以使用数组. 语法: 复制代码 代码如下: response.setHeader(name, value) 接收参数: name          响应头的类型,注意这个名字是不区分大小写. value           响应头的值 例子: 复制代码 代码如下: response.setHeader("Content-Type", "text/ht

随机推荐