Struts2 文件上传下载详解

fqp0528

贡献于2013-05-10

字数:5751 关键词: Struts2 Web框架

本文由浅入深介绍Struts2的文件上传及下载. Struts2上传要用到commons-fileupload 包和commons-io包,注意导入。 介绍如下:1. 单个文件上传;2. 多个文件上传; 3. 上传文件大小和类型限制 4.修改默认提示信息 5.文件下载 一:单个文件上传 UploadAction.java public class UploadAction extends ActionSupport implements ServletContextAware { private File ufile; //上传的文件 private String ufileContentType; //文件的内容类型,ufile为上面定义上传的文件,ContentType是固定写法,不能改变 private String ufileFileName; //上传文件名,ufile为上面定义上传的文件,FileName是固定写法,不能改变 private String note;// 上传文件时的备注 private ServletContext context; //只用来取服务器路径 @Override public String execute() throws Exception { String targetDirectory = context.getRealPath("/upload"); String targetFileName = ufileFileName; File target = new File(targetDirectory, targetFileName); FileUtils.copyFile(ufile, target); return SUCCESS; } public void setServletContext(ServletContext servletContext) { this.context=servletContext; } //此处省略所有get set方法 .... } Struts.xml /uploadsuccess.jsp Input.jsp
文件备注:
上传文件:
uploadsuccess.jsp 自己在jsp里添加下面内容,也可以直接用获取 ${ufileContentType}
${ufileFileName}
${note} 二:多个文件上传(也可以用来做单个文件上传) MutiUploadAction.java public class MutiUploadAction extends ActionSupport implements ServletContextAware { private File[] ufile; //上传的文件,可以用List类型代替数组 private String[] ufileContentType; //文件的内容类型,可以用List类型代替数组 private String[] ufileFileName; // 上传文件名,可以用List类型代替数组 private String note;// 上传文件时的备注 private ServletContext context; //只用来取服务器路径 @Override public String execute() throws Exception { String targetDirectory = context.getRealPath("/upload"); for (int i=0;i /MutiUploadSuccess.jsp MutiUploadSuccess.jsp ${fn}
${note} mutiinput.jsp
文件备注:
上传文件:
上传文件:
三:上传文件大小和类型限制 Struts2 上传文件大小和类型都是通过拦截器实现。条件不符合时,返回原上传界面。 Struts.xml /uploadsuccess.jsp /upload.jsp 10240 jpg,txt,doc 注意: 1. 拦截器必须为两个,fileUpload和defaultStack,不然会出空指针错误; 2. maximumSize是设计上传的单个文件大小,不是全部上传文件的总大小,单位是字节;Struts默认上传限制为2M,如果要上传大于2M的文件,还需要设置Struts的属性 单位也是字节。 3. allowedExtensions 设置允许上传的文件后缀名,不分大小写; 4. 如果allowedExtensions无效可设置allowedTypes具体可查看org.apache.struts2.interceptor.FileUploadInterceptor类的属性,注意设置的时候是按setter方法来设置,而不是直接按属性名,比如allowedTypesSet的setter为setAllowedTypes(),所以设置的时候要设置,而不是。具体的文件类型可以查看Tomcat的conf目录下的web.xml,里面有详细的Types列表。 upload.jsp
文件备注:
上传文件:
四:修改默认提示信息 1. 指定放信息的资源文件: 2. 直接在src目录下建message.properties, 添加以下资源: struts.messages.error.file.extension.not.allowed=\u4E0D\u5141\u8BB8\u4E0A\u4F20\u6B64\u7C7B\u578B\u7684\u6587\u4EF6\u3002 struts.messages.error.file.too.large=\u4E0A\u4F20\u7684\u6587\u4EF6\u8D85\u8FC7\u9650\u5B9A\u7684\u5927\u5C0F\u3002 注意: 1. 关于文件上传的提示,可以查看struts2-core 下的struts-messages.properties文件。 2. 可直接用MyEclipse的属性编辑器输入中文。 动态上传多个文件可以用以下代码: 文件上传
五:文件下载 下载页面: 点击下载 下载DownloadAction.java @SuppressWarnings("serial") public class DownloadAction extends ActionSupport { private String fileName; public InputStream getDownloadFile(){ return ServletActionContext.getServletContext().getResourceAsStream("/upload/"+fileName); } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } } 注意: 1. 必须返回一个InputStream, 方法名可自定义,在Struts.xml里要用到自定义的方法; 2. fileName只是从页面传进来的属性,用来确定下载哪个文件,可写可不写。 3. 本示例中,服务器upload目录下必须有qq.rar文件。 Struts.xml fileName="${fileName}" downloadFile 注意: 1. 返回类型必须为stream 2. 用来指定下载时,本地保存的默认文件名,一定是fileName="文件名"格式,本示例中,文件名取action里的fileName 3. 指定下载哪个stream,示例中,action里是用getDownloadFile()返回InputStream, 所以指定值为downloadFile,如果Action里是用getInputStream来返回,则本名可省略,如参数名忘记可参考org.apache.struts2.dispatcher.StreamResult.java

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ]
3 人已下载

下载文档

相关文档