首页 > 代码库 > struts2下载
struts2下载
如果直接将文件放在web应用的跟目录下,某些文件可
以下载(比如doc等文件),但是存在如下问题:
1.当文件名有中文字符时,就无法下载了
2.直接放在web应用的根目录,所有人都可下载该文件
,没有安全性
为了解决这两个问题,要通过sturts2的文件下载进行
控制
实现文件下载的action,关键只有一条:
提供一个返回值为inputstream的getter方法---该方法
代表了文件下载的入口,他就是我们要让客户下载的文
件的输入流
借助于struts的文件下载后,所有的文件下载都要经过
action的处理
因此acti on就可以对是否允许用户下载进行控制
废话不多说,上代码,包commons-fileupload-1.2.1.jar,mysql-connector-java-5.1.10-bin.jar等
action:
package com.gree.action;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;//此处是一个通用的文件下载action,如下内容是可变德1://1.下载的目标资源2.下载的文件类型3。下载的文件名public class DownLoad extends ActionSupport { private String res;//下载的资源的名字 private String resType;//下载的资源的文件类型 private String resName;//重定义下载的文件名 public String getRes() { return res; } public void setRes(String res) throws Exception {// 对res请求参数进行处理,中文名处理 this.res = new String(res.getBytes("iso-8859-1"),"utf-8"); } public String getResType() { return resType; } public void setResType(String resType) { this.resType = resType; } public String getResName() { return resName; } public void setResName(String resName) { this.resName = resName; } //该方法代表了文件下载的入口,他就是我们要让客户下载的文件的输入流 public InputStream getTarget() throws IOException{ //返回res资源所对应的输入流 return new FileInputStream(ServletActionContext.getServletContext().getRealPath("/")+res); } @Override public String execute() throws Exception { String userid=(String)ActionContext.getContext().getSession().get("userId"); //此方法是控制下载权限,只有登录用户才可下载
System.out.println("userid"+userid); if(userid==null){ addActionError("请先登录再下载!"); return ERROR; } return SUCCESS; } }
struts2.xml文件该action配置如下:
<action name="down" class="com.gree.action.DownLoad"> <result type="stream"><!-- 该参数指定二进制流的类型 --> <param name="contentType">${resType}</param> <!-- 该参数返回InputStream方法 --> <param name="inputName">target</param> <param name="contentDisposition">filename=${resName}</param><!-- 控制文件下载是换缓冲的大小 --> <param name="bufferSize">10000000</param> </result> <result name="error">login.jsp</result> </action>
upload.jsp页面中下载代码如下
<!-- 三个参数其中,res是服务器黄总目标资源的名称,resType是目标资源文件类型,其中文件类型可 在 tomcat安装路径下的conf文件夹下web.xml文件中获取,比如ppt的文件类型为application/vnd.ms-powerpoint, --><!-- res重定义下载的名字 --> <a href="${pageContext.request.contextPath}/down?res=Excel.xlsx&resType=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet&resName=new.xlsx">下载附件</a> <a href="${pageContext.request.contextPath}/down?res=开发日志.txt&resName=开发.txt">下载附件</a>
struts2下载
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。