下载
1. 下载是一种响应方式
正常的响应:响应正文是html:response.getWriter().print("html");
下载的响应:
1.一个流:字节数据:response.getOutputStream().write(文件的内容,即一些字节数据);
2.response.setContentType("image/jpeg");
3. response.setHeader("Content-disposition", "attachment;filename=xxx");
2. Struts下载
Struts2中的响应由Result来完成,所以我们需要配置一种特殊类型的<reuslt>
1). 配置<result type="stream">,其中stream说明了当前结果为下载。
2). 需要为结果配置两个头,一个流!
<param name="contentType">image/jpeg</param>
<param name="contentDisposition">attachment;filename=a.jpg</param>
<!--
结果会得到Action的类型为InputStream属性的名称!
结果得到名称之后,通过名称来调用get方法得到流对象。
-->
<param name="inputName">inputStream</param>
必须为Action提供一个InputStream类型的属性,必须提供get方法
需要给<result>配置属性名称参数,而不是流对象本身
下载附件名乱码解决
/** * 下载文件时,针对不同浏览器,进行附件名的编码 * @param filename 下载文件名 * @param agent 客户端浏览器 * @return 编码后的下载附件名 * @throws IOException */ public String encodeDownloadFilename(String filename, String agent) throws IOException{ if(agent.contains("Firefox")){ // 火狐浏览器 filename = "=?UTF-8?B?"+new BASE64Encoder().encode(filename.getBytes("utf-8"))+"?="; }else{ // IE及其他浏览器 filename = URLEncoder.encode(filename,"utf-8"); } return filename; }