struts2入门教程三(上传与下载)

来源:互联网 发布:淘宝宝贝推荐模块多大 编辑:程序博客网 时间:2024/04/27 21:33

文件的上传与下载

上传

Servlet3.0的上传改进

HttpServletRequest增加了对文件上传的支持

Part getPart(String name)通过名称获取文件上传域

Collection<Part> getParts() 获取所有文件上传域

<input type="file".../>

表单属性enctype,数据表单编码方式

application/x-www-form0urlencoded

multipart/form-data

text/plain

java 代码

package action;import java.io.IOException;import java.io.PrintWriter;import java.util.Collection;import javax.servlet.ServletException;import javax.servlet.annotation.MultipartConfig;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.Part;@MultipartConfigpublic class uploadServlet extends HttpServlet {/** *  */private static final long serialVersionUID = 1L;@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out=response.getWriter();String fileName=request.getParameter("name");Part part=request.getPart("file");out.println("上传文件的类型:"+part.getContentType()+"<br/>");out.println("上传文件的大小"+part.getSize()+"<br/>");Collection<String> headerNames=part.getHeaderNames(); for(String headerName:headerNames){ out.println(headerName+"-->"+part.getHeader(headerName)+"<br/>");  } //  这里 路径为绝对路径 / 表示 的是 webroot 的 根路径 part.write(getServletContext().getRealPath("/uploadFiles")+"/"+fileName);}}

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>        <title>My JSP 'index.jsp' starting page</title>  </head>    <body>   <form action="/upload2/uploadServlet" method="post" enctype="multipart/form-data"> 文件名:<input type="text" name="name"> 文件:<input type="file" name="file"> <input type="submit"></form>  </body></html>

web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">  <display-name>upload2</display-name>    <servlet>  <servlet-name>upload</servlet-name>  <servlet-class>action.uploadServlet</servlet-class>  </servlet>  <servlet-mapping>  <servlet-name>upload</servlet-name>  <url-pattern>/uploadServlet</url-pattern>  </servlet-mapping>  <welcome-file-list>        <welcome-file>index.jsp</welcome-file>     </welcome-file-list></web-app>

运行方式及结果



struts2单文件上传

java代码

package action;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class UploadAction extends ActionSupport {/** *  */private static final long serialVersionUID = 1L;private String title;private File upload;private String uploadContentType;private String uploadFileName;private String savePath;public String upload()throws Exception{FileInputStream fis=new FileInputStream(getUpload());FileOutputStream fos=new FileOutputStream(getSavePath()+"\\"+getUploadFileName());byte[] buffer=new byte[1024];int len=0;while((len=fis.read(buffer))>0){fos.write(buffer,0,len);}fos.close();fis.close();return SUCCESS;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}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 ServletActionContext.getServletContext().getRealPath(savePath);}public void setSavePath(String savePath) {this.savePath = savePath;}}

struts.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <package name="hello" namespace="/hello" extends="struts-default"><action name="upload" class="action.UploadAction" method="upload"><param name="savePath">/uploadFiles</param><result name="success">/succ.jsp</result><result name="input">/login.jsp</result></action></package></struts>
成功页面

succ.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags"  prefix="s"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>        <title>My JSP 'index.jsp' starting page</title>  </head>    <body>    <%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>   上传成功!<br/>文件标题:<s:property value=" + title"/><br/>文件为:<img src="<%=basePath %><s:property value="'uploadFiles/' + uploadFileName"/>"/><br/>  </body>

</html>

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>        <title>My JSP 'index.jsp' starting page</title>  </head>    <body>   <form action="hello/upload" method="post" enctype="multipart/form-data"> 文件名:<input type="text" name="title"> 文件:<input type="file" name="upload"> <input type="submit"></form>  </body>

</html>

Struts 多文件上传

一:使用struts2自身的验证

java 代码
package action;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class UploadAction extends ActionSupport {/** *  */private static final long serialVersionUID = 1L;private String[] titles;private File[] upload;private String[] uploadContentType;private String[] uploadFileName;private String savePath;    private String allowTypes;public String upload() throws Exception {if (upload.length <= 0) {return null;}for (int i = 0; i < upload.length; i++) {FileInputStream fis = new FileInputStream(getUpload()[i]);System.out.println(getUploadFileName());FileOutputStream fos = new FileOutputStream(getSavePath() + "\\"+ getUploadFileName()[i]);byte[] buffer = new byte[1024];int len = 0;while ((len = fis.read(buffer)) > 0) {fos.write(buffer, 0, len);}fos.close();fis.close();}return SUCCESS;}public boolean check(String type){String[] types=allowTypes.split(",");for (String s: types) {if(s.equals(type)){return true;}}return false;}//public void validate(){////for (String Type : uploadContentType) {////boolean b=check(Type);////if(!b){//// 添加FieldError//addFieldError("upload", "您要上传的文件类型不正确!");}//}////}//public String[] getTitles() {return titles;}public void setTitles(String[] titles) {this.titles = titles;}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 ServletActionContext.getServletContext().getRealPath(savePath);}public void setSavePath(String savePath) {this.savePath = savePath;}// 设计校验类型的 注入public void setAllowTypes(String allowTypes) {this.allowTypes = allowTypes;}/* * // 返回 绝对路径 return * ServletActionContext.getServletContext().getRealPath(savePath); */}

struts.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts>  <constant name="struts.custom.i18n.resources" value="mess"/>  <constant name="struts.i18n.resources" value="UTF-8"/><package name="hello" namespace="/hello" extends="struts-default"><action name="upload" class="action.UploadAction" method="upload"><param name="savePath">/uploadFiles</param><param name="allowTypes">image/png,image/gif,image/jpg,image/jpeg</param><result name="success">/succ.jsp</result><result name="input">/index.jsp</result><!-- 配置fileUpload的拦截器 --><interceptor-ref name="fileUpload"><!-- 配置允许上传的文件类型 --><param name="allowedTypes">image/png,image/gif,image/jpeg</param><!-- 配置允许上传的文件大小 --><param name="maximumSize">2000</param></interceptor-ref><!--  配置系统默认的拦截器 --><interceptor-ref name="defaultStack"></interceptor-ref></action></package></struts>

index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>        <title>My JSP 'index.jsp' starting page</title>  </head>    <body>  <s:fielderror/>   <form action="hello/upload" method="post" enctype="multipart/form-data"> 文件名:<input type="text" name="titles"><br/> 文件:<input type="file" name="upload"><br/><br/> 文件名:<input type="text" name="titles"><br/> 文件:<input type="file" name="upload"><br/> <input type="submit" value="上传"></form>  </body></html>

mess.properties---国际化的实现
struts.messages.error.file.too.large=\u4E0A\u4F20\u7684\u6587\u4EF6\u592A\u5927\u8D85\u8FC7\u89C4\u5B9A\u9650\u5236struts.messages.error.content.type.not.allowed=\u4E0A\u4F20\u7684\u6587\u4EF6\u7C7B\u578B\u4E0D\u5141\u8BB8struts.messages.error.uploading=\u4E0A\u4F20\u9519\u8BEF

 二: 使用自定义的方式验证

java 代码
package action;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class UploadAction extends ActionSupport {/** *  */private static final long serialVersionUID = 1L;private String[] titles;private File[] upload;private String[] uploadContentType;private String[] uploadFileName;private String savePath;    private String allowTypes;public String upload() throws Exception {if (upload.length <= 0) {return null;}for (int i = 0; i < upload.length; i++) {FileInputStream fis = new FileInputStream(getUpload()[i]);System.out.println(getUploadFileName());FileOutputStream fos = new FileOutputStream(getSavePath() + "\\"+ getUploadFileName()[i]);byte[] buffer = new byte[1024];int len = 0;while ((len = fis.read(buffer)) > 0) {fos.write(buffer, 0, len);}fos.close();fis.close();}return SUCCESS;}public boolean check(String type){String[] types=allowTypes.split(",");for (String s: types) {if(s.equals(type)){return true;}}return false;}public void validate(){for (String Type : uploadContentType) {boolean b=check(Type);if(!b){// 添加FieldErroraddFieldError("upload", "您要上传的文件类型不正确!");}}}public String[] getTitles() {return titles;}public void setTitles(String[] titles) {this.titles = titles;}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 ServletActionContext.getServletContext().getRealPath(savePath);}public void setSavePath(String savePath) {this.savePath = savePath;}// 设计校验类型的 注入public void setAllowTypes(String allowTypes) {this.allowTypes = allowTypes;}}

struts.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts>  <package name="hello" namespace="/hello" extends="struts-default"><action name="upload" class="action.UploadAction" method="upload"><param name="savePath">/uploadFiles</param><param name="allowTypes">image/png,image/gif,image/jpg,image/jpeg</param><result name="success">/succ.jsp</result><result name="input">/index.jsp</result></action></package></struts>
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>        <title>My JSP 'index.jsp' starting page</title>  </head>    <body>  <s:fielderror/>   <form action="hello/upload" method="post" enctype="multipart/form-data"> 文件名:<input type="text" name="titles"><br/> 文件:<input type="file" name="upload"><br/><br/> 文件名:<input type="text" name="titles"><br/> 文件:<input type="file" name="upload"><br/> <input type="submit" value="上传"></form>  </body></html>

下载

struts的下载方式

struts2 的文件下载

java 代码
package action;import java.io.InputStream;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class DownAction extends ActionSupport {//该属性可以在配置文件中动态指定该属性值private String inputPath;//依赖注入该属性值的setter方法public void setInputPath(String value){inputPath = value;}/*定义一个返回InputStream的方法,该方法将作为被下载文件的入口,且需要配置stream类型结果时指定inputName参数,inputName参数的值就是方法去掉get前缀、首字母小写的字符串*/public InputStream getTargetFile() throws Exception {//ServletContext提供getResourceAsStream()方法//返回指定文件对应的输入流 return ServletActionContext.getServletContext().getResourceAsStream(inputPath);}}

struts.xml
配置一个action
<action name="down" class="action.DownAction"><param name="inputPath">\uploadFiles\扑克.png</param><result name="success" type="stream"><param name="contentType">image/png</param><param name="inputName">targetFile</param><param name="bufferSize">4096</param><param name="contentDisposition">filename="1110.jpg"</param></result><result name="input">/index.jsp</result></action>

下载页面
简单的超链接下载
<a href="hello/down">111</a><a href="hello/down">222</a><!-- <a href="uploadFiles/15.jpg">111</a><a href="uploadFiles/扑克.png">222</a> -->

简单的超链接下载

只需要基本的一个访问链接即可



2 0
原创粉丝点击