HttpServletResponse文件下载


案例-完成文件下载

先创建一个文件夹叫download

然后在文件里创建几个例子文件

 

 

 然后这个文件夹复制到你的Webcontion下去

 

 

 然后在Webcontion上创建一个jsp,叫download

 

 

 除了能在标签种能设置post请求以外的所有的标签都是get请求,就是不能设置post请求的标签都是get请求

所以a标签就是个get请求

因为是get请求所以这个filename就是所带的参数 让他服务器知道顾客点的是那个 所给出相应的资源

 

 

 

 然后在src下创建一个包叫com.oracle.demo01在创建一个Servlet叫DownloadServlet

 

 

 然后在jsp写

 

 

 重启服务器显示出

a.png

 

 

a.txt

 

 是乱码

a.wmv和a.rar都是直接下载

 

 游览器能解析的就直接打开 不能解析的就提供下载

 

 

上述代码可以将图片从服务器端传输到浏览器,但浏览器直接解析图片显示在页面上, 而不是提供下载,我们需要设置两个响应头,告知浏览器文件的类型和文件的打开方 式。

1)告知浏览器文件的类型:response.setContentType(文件的MIME类型);

2)告示浏览器文件的打开方式是下载:

response.setHeader("Content-Disposition","attachment;filename=文件名称");

 

 写完后重启服务器显示:

 

 然后在做一个实例

 右键你的图片改成中文名字

 

 然后之前jsp的也改成小狗

 

 改完后再重启服务器测试发现

 

 这样的话下载是没有问题的,但是因为码表的问题中文乱码所以名字不显示,为了改正这种情况

 

但是,如果下载中文文件,页面在下载时会出现中文乱码或不能显示文件名的情况, 原因是不同的浏览器默认对下载文件的编码方式不同,ie是UTF-8编码方式,而火狐 浏览器是Base64编码方式。所里这里需要解决浏览器兼容性问题,解决浏览器兼容 性问题的首要任务是要辨别访问者是ie还是火狐(其他),通过Http请求体中的一 个属性可以辨别

 

 

 

解决乱码方法如下(不要记忆--了解):

String filenameEncoder=””;

if (agent.contains("MSIE")) {

// IE浏览器

filenameEncoder= URLEncoder.encode(filename, "utf-8");

filenameEncoder= filenameEncoder.replace("+", " ");

} else if (agent.contains("Firefox")) {

// 火狐浏览器

BASE64Encoder base64Encoder = new BASE64Encoder();

filenameEncoder= "=?utf-8?B?"

+ base64Encoder.encode(filename.getBytes("utf-8")) + "?=";

} else {

// 其它浏览器

filenameEncoder= URLEncoder.encode(filename, "utf-8");

}

 

其中agent就是请求头User-Agent的值

代码如下

 

 运行结果:

 

 一次性验证码

 

 解压到

 

 把CheckImgServlet复制到src里的demo01下 在把包名改了

 

 

 

 在把new_words复制到WEB-INF下

 

 在设置你的web-xml

 

 运行出现

在webcontion创建一个jsp

 

 

 

 点一下刷新一张图片

 

response细节点:

  1. response获得的流不需要手动关闭,web容器(tomcat容器)会帮助我们关闭,
  2. getWriter和getOutputStream不能同时调用
  3. 重定向语句一般作为终结代码


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM