struts2实现文件上传与下载功能
2017-04-11 16:33
405 查看
一、Demo介绍
基于struts2框架,实现多文件的上传和下载功能。实现原理图:
部分界面图:
上传成功及下载页面:
二、主要代码
uploadFile.jsp:在form表单中包含一个文本框(上传用户的姓名)和两个文件上传选项.<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>多文件上传</title> </head> <body> <center> <s:form action="docUpload" method="post" enctype="multipart/form-data"> <s:textfield name="name" label="姓名" size="20"/> <s:file name="upload" label="选择文档" size="20"/> <s:file name="upload" label="选择文档" size="20"/> <s:submit value="确认上传" align="center"/> </s:form> </center> </body> </html>
struts.xml:分别配置了上传和下载的Action(DocUploadAction和DocDownloadAction)。在文件上传时,做了一些简单的过滤。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.7.dtd"> <struts> <constant name="struts.i18n.encoding" value="utf-8"/> <package name="default" extends="struts-default"> <action name="docUpload" class="com.cy.action.DocUploadAction"> <!-- 使用fileUpload拦截器 --> <interceptor-ref name="fileUpload"> <!-- 指定允许上传的文件大小最大为50000字节 --> <param name="maximumSize">50000</param> </interceptor-ref> <!-- 配置默认系统拦截器栈 --> <interceptor-ref name="defaultStack"/> <!-- param子元素配置了DocUploadAction类中savePath属性值为/upload --> <param name="savePath">/upload</param> <result>/showFile.jsp</result> <!-- 指定input逻辑视图,即不符合上传要求,被fileUpload拦截器拦截后,返回的视图页面 --> <result name="input">/uploadFile.jsp</result> </action> <action name="docDownload" class="com.cy.action.DocDownloadAction"> <!-- 指定结果类型为stream --> <result type="stream"> <!-- 指定下载文件的文件类型 text/plain表示纯文本 --> <param name="contentType"> application/msword,text/plain </param> <!-- 指定下载文件的入口输入流 --> <param name="inputName">inputStream</param> <!-- 指定下载文件的处理方式与文件保存名 attachment表示以附件形式下载,也可以用inline表示内联即在浏览器中直接显示,默认值为inline --> <param name="contentDisposition"> attachment;filename="${downloadFileName}" </param> <!-- 指定下载文件的缓冲区大小,默认为1024 --> <param name="bufferSize">40960</param> </result> </action> </package> </struts>
DocUploadAction.java:采用数组方式实现多文件上传。
package com.cy.action; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Date; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class DocUploadAction extends ActionSupport { private String name; private File[] upload; private String[] uploadContentType; private String[] uploadFileName; private String savePath; private Date createTime; public String getName() { return name; } public void setName(String name) { this.name = name; } public File[] getUpload() { return upload; } public void setUpload(File[] upload) { this.upload = upload; } public String[] getUploadContentType() { return uploadContentType; } public void setUploadContentType(String[] uploadContentType) { this.uploadContentType = uploadContentType; } public String[] getUploadFileName() { return uploadFileName; } public void setUploadFileName(String[] uploadFileName) { this.uploadFileName = uploadFileName; } public String getSavePath() { return savePath; } public void setSavePath(String savePath) { this.savePath = savePath; } public Date getCreateTime(){ createTime=new Date(); return createTime; } public static void copy(File source,File target){ InputStream inputStream=null; OutputStream outputStream=null; try{ inputStream=new BufferedInputStream(new FileInputStream(source)); outputStream=new BufferedOutputStream(new FileOutputStream(target)); byte[] buffer=new byte[1024]; int length=0; while((length=inputStream.read(buffer))>0){ outputStream.write(buffer, 0, length); } }catch(Exception e){ e.printStackTrace(); }finally{ if(null!=inputStream){ try { inputStream.close(); } catch (IOException e2) { e2.printStackTrace(); } } if(null!=outputStream){ try{ outputStream.close(); }catch(Exception e2){ e2.printStackTrace(); } } } } @Override public String execute() throws Exception { for(int i=0;i<upload.length;i++){ String path=ServletActionContext.getServletContext().getRealPath(this.getSavePath())+"\\"+this.uploadFileName[i]; File target=new File(path); copy(this.upload[i],target); } return SUCCESS; } }
showFile.jsp:对上传的文件设置了超链接,供下载使用。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>显示上传文档</title> </head> <body> <center> <font style="font-size:18px;color:red">上传者:<s:property value="name"/></font> <table width="45%" cellpadding="0" cellspacing="0" border="1"> <tr> <th>文件名称</th> <th>上传者</th> <th>上传时间</th> </tr> <s:iterator value="uploadFileName" status="st" var="doc"> <tr> <td align="center"> <a href="docDownload.action?downPath=upload/<s:property value="#doc"/>"> <s:property value="#doc"/> </a> </td> <td align="center"><s:property value="name"/></td> <td align="center"><s:date name="createTime" format="yyyy-MM-dd HH:mm:ss"/></td> </tr> </s:iterator> </table> </center> </body> </html>
三、注意事项
1、实现文件上传与下载功能,必须在uploadFile.jsp页面中form表单中设置enctype=”multipart/form-data”属性。2、所有form表单中action=“xxx”属性,其中xxx必须与struts.xml中配置的action的name值完全一致。
3、在form表单中设置属性enctype=”multipart/form-data”的情况下,如何获取表单中提交的文本值?具体实现方法见http://blog.csdn.net/u012829611/article/details/70072569
4、一个struts.xml文件中可以配置多个action,在配置过程中需要与第二点注意事项相结合。
5、这里只列出部分主要代码,如需完整Demo代码,可到http://download.csdn.net/my下载
转载请注明!谢谢!
相关文章推荐
- JavaWeb中struts2实现文件上传下载功能实例解析
- JavaEE中struts2实现文件上传下载功能实例解析
- 用Struts2更好的实现文件的上传、下载功能以及解决中文名称问题
- Struts2-上传/下载文件功能实现
- JavaEE中struts2实现文件上传下载功能实例解析
- Struts2实现文件的上传与动态下载功能。
- java中struts2实现文件上传下载功能实例解析
- java中struts2实现文件上传下载功能
- struts2 实现简单的文件上传、下载功能
- 拥有网页版小U盘 ASP.NET实现文件上传与下载功能
- Struts2.0实现的文件上传(单附件和多附件)以及附件下载功能
- 细谈struts2(十三)struts2实现文件上传和下载详解
- Struts2.0实现的文件上传(单附件和多附件)以及附件下载功能
- Struts2实现文件下载功能代码分享(文件名中文转码)
- struts2文件的上传和下载功能
- 调用hadoop api实现文件的上传、下载、删除、创建目录和显示功能
- 使用struts2实现下载功能遇到的文件中文问题解决经验分享
- struts2实现文件上传和下载
- 使用Struts2实现文件的上传与动态下载
- spring mvc实现文件上传与下载功能