Struts2的文件上传与下载案例
2017-08-27 13:05
363 查看
文件上传案例
upload.jsp上传页面主要代码<body> <form action="${pageContext.request.contextPath }/fileUploadAction" method="post" enctype="multipart/form-data"> <table align="center" width="80%"> <tr> <td align="center">文件: <input type="file" name="file1"></td> </tr> <tr> <td align="center"><input type="submit" value="上传"/></td> </tr> </table> </form> </body>
文件上传action的主要代码:
需要注意的是:这是使用的set方法
import java.io.File; import org.apache.commons.io.FileUtils; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class FileUpload extends ActionSupport { //<input type="file" name="file1"> private File file1; //文件名 private String file1FileName;//file1为jsp标签内容,固定写法 //文件的类型(MIME) private String fileContentType;//也是固定写法,同上 public void setFile1(File file1) { this.file1 = file1; } public void setFile1FileName(String file1FileName) { this.file1FileName = file1FileName; } public void setFileContentType(String fileContentType) { this.fileContentType = fileContentType; } @Override public String execute() throws Exception { // 拿到上传的文件进行处理 //上传到upload目录 //获取上传的目录的路径,是通过request获取的 String path=ServletActionContext.getServletContext().getRealPath("/upload"); //创建目标文件对象 File file=new File(path,file1FileName);//file对象的拼接 //把上传的文件,拷贝到目标文件中 FileUtils.copyFile(file1, file); return "success"; } }
struts.xml的配置
<action name="fileUploadAction" class="cn.test.fileUpload.FileUpload"> <!--限制运行上传的文件的类型 --> <interceptor-ref name="defaultStack"> <!--限制允许的扩展名 --> <param name="fileUpload.allowedExtensions">txt,jpg,epub</param> </interceptor-ref> <result name="success">/e/success.jsp </result> <!--配置错误视图 --> <result name="input">/e/error.jsp</result> </action>
到这里,文件上传的工作已经完成。(需要注意的是,这里的struts.xml是放在action所在的包里,还需要配一个全局的xml将其引入)
测试:
文件下载
对于文件下载,首先要做的就是显示要下载的信息,文件名,之后再通过jsp进行信息传递,到action去进行下载的处理。action代码:
import java.io.File; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; i 4000 mport java.util.Map; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; /** * 文件下载 * 1.显示所有要下载的文件列表 * 2.文件下载 * */ public class DownAction extends ActionSupport{ /******1.显示所有要下载文件的列表*******/ public String list() throws Exception { //得到upload目录路径 String path=ServletActionContext.getServletContext().getRealPath("/upload"); //目录对象、 File file =new File(path); //得到所有要下载的文件的文件名 String[] fileNames= file.list(); // 保存,使用request去保存,首先要获得request对象 ActionContext ac = ActionContext.getContext(); //ac.get("request")得到 的就是requestmap,同理可得session //得到代表request的map Map<String, Object> request = ac.getContextMap(); request.put("fileNames", fileNames);//将字符串数组放到request域中 return "list"; } /***********2.文件下载*****/ //1.获取要下载的文件名 private String fileName; public void setFileName(String fileName) { //处理传入的参数,中文乱码(get提交) try { //把处理好的文件名,赋值 this.fileName =new String(fileName.getBytes("ISO8859-1"),"UTF-8"); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } this.fileName=fileName; } //2.下载提交的业务方法(在Struts.xml中配置返回stream) public String down() throws Exception { return "download"; } //3.返回文件流的方法,配置文件可以使用 public InputStream getAttrInputStream(){ return ServletActionContext.getServletContext().getResourceAsStream("/upload/"+fileName); } //4.下载显示的文件名(浏览器显示的文件名) public String getDownFileName(){ //需要进行中文的编码 try { fileName=URLEncoder.encode(fileName,"UTF-8"); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } return fileName; } }
list.jsp的作用不仅是展示有哪些文件可以下载,还需要提供下载的操作,传递参数到action进行处理,通过配置文件进行跳转。主要代码如下:
<body> <table border="1" align="center" width="80%"> <tr> <td>编号</td> <td>文件名</td> <td>操作</td> </tr> <c:forEach var="fn" items="${fileNames}" varStatus="vs"> <tr> <td>${vs.count }</td> <td>${fn}</td> <td> <!--构建一个URL --> <c:url var="url" value="down_down"> <c:param name="fileName" value="${fn }"></c:param> </c:url> <a href="${url}">下载</a> </td> </tr> </c:forEach> </table> </body>
Struts.xml的配置:
要注意的是:在配置result的时候,如果在action没有attrInputStream为null的时候,会出现500,错误,需要检查,文件的路径,名称是否传递错误。
<action name="down_*" class="cn.test.fileUpload.DownAction" method="{1}"> <!--列表展示 --> <result name="list">/e/list.jsp</result> <!-- 下载操作 --> <result name="download" type="stream"> <!--调用action 返回流的方法 --> <!-- 允许下载文件的类型,指定为所有的二进制文件 --> <param name="contentType">application/octet-stream</param> <!--对应的是Action中的属性:返回流的属性【其实就是getAttrInputstream()】 --> <param name="inputName">attrInputStream</param> <!--下载头:包括:浏览器显示的文件名,action down 中的fileName --> <param name="contentDisposition">attachment;filename=${downFileName}</param> <!--缓冲区大小设置 --> <param name="bufferSize">1024</param> </result> </action>
测试:
已经在xml配置好了,这里在浏览器中需要输入的是http://localhost:8080/Test09_structs2/down_list
需要说明的是:这里的文件上传和下载是把文件上传到服务器的一个文件夹里,下载也是从服务器的文件中查找下载的,没有使用到数据库方面的操作。
相关文章推荐
- Struts2系统学习(10)文件上传与下载案例及原理分析
- Struts2文件上传下载
- struts2拦截器、文件的上传和下载
- struts2 文件上传和下载,以及部分源码解析
- struts2学习(13)struts2文件上传和下载(1)
- JAVA Web 之 struts2文件上传下载演示(一)(转)
- struts2文件上传和下载
- 技术总结(一)——struts2文件上传和下载
- struts2文件上传与下载
- 【Struts2】Struts2学习(6)文件上传和下载
- struts2文件上传和下载
- struts2上传下载文件中遇到的乱码问题
- struts2 文件上传下载
- 【SSH2(实用文章)】--Struts2文件上传和下载的例子
- struts2 实现文件上传下载 (下载支持中文文件名)代码
- struts2实现文件上传和下载
- 11、Struts2 的文件上传和下载
- struts2实现文件的上传与下载
- Struts2文件上传下载(一)
- struts2文件的上传和下载