首页 > 代码库 > 关于struts2的上传和下载
关于struts2的上传和下载
1. 1文件上传技术:
JSPSmartUpload:应用在Model1年代.(嵌入到JSP)
FileUpload:应用在Model2年代.
Servlet3.o:完成文件上传.
Struts2框架:完成文件上传.
1.2 文件上传要素:
* 1.表单的提交方式:POST.(POST 没有大小限制)
* 2.表单元素中需要有<input type=”file”>这个元素必须有一个name属性.
* 3.表单的enctype属性是multipart/form-data(MIME协议中的分部分.)
1.3 Struts2完成文件上传:
页面:
文件上传:<input type="file" name="upload"><br/>
1 <s:form theme="simple" action="templateAction_%{ id == null? ‘add‘ : ‘edit‘ }" namespace="/" method="post" enctype="multipart/form-data">
Action:
提供三个属性:
private File upload; // 获得文件
private String uploadContentType; // 获得文件类型
private String uploadFileName; // 获得文件名
对三个属性提供set方法:
2.1 文件下载原理:
将服务器上一个文件输出到浏览器:
* 设置两个头和一个流.
* ContentType:文件的MIME类型.
* Content-Dispostion:提示下载.
* 代表文件的输入流:---(输出流是固定的response.getOutputStream();)
2.2 Struts2中的文件下载:
1 依赖一个stream的结果类型: 2 在Action中提供: 3 // 获得文件的MIME类型的方法: 4 // 相当于Action类中有contentType属性. 5 public String getContentType() { 6 // 如何获得文件的MIME类型? 7 String type = ServletActionContext.getServletContext().getMimeType( 8 filename); 9 return type; 10 } 11 12 // 提供一个流 13 public InputStream getInputStream() throws FileNotFoundException { 14 // web 项目: 15 // 获得download的磁盘绝对路径 16 String realpath = ServletActionContext.getServletContext().getRealPath( 17 "/download"); 18 InputStream is = new FileInputStream(realpath + "/" + filename); 19 return is; 20 } 21 22 // 文件的下载ContentDispostion中获得那个文件名:必须是编码后的文件名. 23 // 中文:IE浏览器用URLEncoder Firefox:Base64编码. 24 public String getFileName() throws IOException { 25 // 获得浏览器类型: 26 String agent = ServletActionContext.getRequest() 27 .getHeader("User-Agent"); 28 // 调用该方法进行编码 29 String name = encodeDownloadFilename(filename, agent); 30 return name; 31 } 32 33 /** 34 * 下载文件时,针对不同浏览器,进行附件名的编码 35 * 36 * @param filename 37 * 下载文件名 38 * @param agent 39 * 客户端浏览器 40 * @return 编码后的下载附件名 41 * @throws IOException 42 */ 43 public String encodeDownloadFilename(String filename, String agent) 44 throws IOException { 45 if (agent.contains("Firefox")) { // 火狐浏览器 46 filename = "=?UTF-8?B?" 47 + new BASE64Encoder().encode(filename.getBytes("utf-8")) 48 + "?="; 49 } else { // IE及其他浏览器 50 filename = URLEncoder.encode(filename, "utf-8"); 51 } 52 return filename; 53 } 54 55 在配置文件中: 56 <!-- 配置文件下载的Action --> 57 <package name="download" extends="struts-default"> 58 <action name="download" class="cn.itcast.struts2.demo2.DownloadAction"> 59 <!-- 完成下载 需要在result的type属性上使用stream --> 60 <result name="success" type="stream"> 61 <!-- 参数的name是stream结果类型中的参数的名称 --> 62 <!-- OGNL表达式:获得到Action中contentType的属性! --> 63 <param name="contentType">${contentType}</param> 64 <!-- 设置ContentDispostion --> 65 <param name="contentDisposition">attachment;filename=${fileName}</param> 66 <!-- <param name="inputName">${stream}</param> --> 67 </result> 68 </action> 69 </package> 70 依赖一个stream的结果类型: 71 在Action中提供: 72 // 获得文件的MIME类型的方法: 73 // 相当于Action类中有contentType属性. 74 public String getContentType() { 75 // 如何获得文件的MIME类型? 76 String type = ServletActionContext.getServletContext().getMimeType( 77 filename); 78 return type; 79 } 80 81 // 提供一个流 82 public InputStream getInputStream() throws FileNotFoundException { 83 // web 项目: 84 // 获得download的磁盘绝对路径 85 String realpath = ServletActionContext.getServletContext().getRealPath( 86 "/download"); 87 InputStream is = new FileInputStream(realpath + "/" + filename); 88 return is; 89 } 90 91 // 文件的下载ContentDispostion中获得那个文件名:必须是编码后的文件名. 92 // 中文:IE浏览器用URLEncoder Firefox:Base64编码. 93 public String getFileName() throws IOException { 94 // 获得浏览器类型: 95 String agent = ServletActionContext.getRequest() 96 .getHeader("User-Agent"); 97 // 调用该方法进行编码 98 String name = encodeDownloadFilename(filename, agent); 99 return name;100 }101 102 /**103 * 下载文件时,针对不同浏览器,进行附件名的编码104 * 105 * @param filename106 * 下载文件名107 * @param agent108 * 客户端浏览器109 * @return 编码后的下载附件名110 * @throws IOException111 */112 public String encodeDownloadFilename(String filename, String agent)113 throws IOException {114 if (agent.contains("Firefox")) { // 火狐浏览器115 filename = "=?UTF-8?B?"116 + new BASE64Encoder().encode(filename.getBytes("utf-8"))117 + "?=";118 } else { // IE及其他浏览器119 filename = URLEncoder.encode(filename, "utf-8");120 }121 return filename;122 }123 124 在配置文件中:125 <!-- 配置文件下载的Action -->126 <package name="download" extends="struts-default">127 <action name="download" class="cn.itcast.struts2.demo2.DownloadAction">128 <!-- 完成下载 需要在result的type属性上使用stream -->129 <result name="success" type="stream">130 <!-- 参数的name是stream结果类型中的参数的名称 -->131 <!-- OGNL表达式:获得到Action中contentType的属性! -->132 <param name="contentType">${contentType}</param>133 <!-- 设置ContentDispostion -->134 <param name="contentDisposition">attachment;filename=${fileName}</param>135 <!-- <param name="inputName">${stream}</param> -->136 </result>137 </action>138 </package>
关于struts2的上传和下载
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。