struts2第十六讲学习笔记,上传文件
2017-06-04 17:18
323 查看
1.单个文件上传
struts2的文件上传功能是apache下的comoms-fileupload来实现的
单个文件上传的jsp页面要点,要求必须是post提交,并且enctype="multipart/form-data"
配置文件要点,主要是对文件大小的控制fileUpload拦截器的maximumSize和struts2的静态属性struts.mutilpart.maxSize。
maxSize大于等于maximumSize
action代码要点,在Action中必须提供三个属性,一个是File类型,名称是跟表单元素的名称一致,其它两个是表单元素名+FileName与表单元素名+ContentType,并提供get和set方法(凡是加入一个属性,基本上都需要get和set方法)
2.批量文件上传 batchUpload
JSP页面要点,多个<input type="file"
name="file" >,它们的name都是file.
写一个JSP页面,内嵌一些JS脚本,添加这个上述input标签
配置文件代码struts.xml
配置文件指向指定的java类,这个Action的代码如下,要点是从页面接收的是许多File,所以用数组接收,并且生成get和set方法
struts2的文件上传功能是apache下的comoms-fileupload来实现的
单个文件上传的jsp页面要点,要求必须是post提交,并且enctype="multipart/form-data"
jsp页面 <body> <form action="upload.action" method="post" enctype="multipart/form-data"> 文件:<input type="file" name="file"/> <input type="submit" value="上传"/> </form> </body> |
maxSize大于等于maximumSize
<?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> <!--从struts.core包的struts2包里的default.properties中拿到数据 --> <!-- maxSize必须大于等于maximumSize --> <constant name="struts.multipart.maxSize" value="20971520"/> <constant name="struts.multipart.saveDir" value="d:\default"/> <package name="hello" extends="struts-default" namespace="/"> <interceptors> <interceptor-stack name="myStack"> <!--引用fileUpload拦截器,从core包的struts-default.xml中找到 --> <interceptor-ref name="fileUpload"> <param name="maximumSize">20971520</param> </interceptor-ref> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <default-interceptor-ref name="myStack" /> <action name="upload" class="action.UploadAction" method="upload"> <result>/success.jsp</result> <!--做到凡是有result的地方心中都有拦截器--> </action> </package> </struts> |
package action; 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 javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport{ private static final long serialVersionUID = 1L; 属性必须生成get和set方法 private File file;//将上传的文件封装成对象 //从JSP页面接收到的文件名 private String fileFileName; //文件类型 private String fileContentType; public String upload() throws IOException{ //先拿到request对象,为了设置默认的上传根路径 HttpServletRequest request = ServletActionContext.getRequest(); @SuppressWarnings("deprecation") String path = request.getRealPath("/upload"); InputStream in = new FileInputStream(file);//读取流关联文件 System.out.println(file.exists()); File file = new File(path,fileFileName); OutputStream out = new FileOutputStream(file); System.out.println(file);//打印路径,为了找到这个根路径 int len = 0; byte [] buf = new byte[1024]; while((len=in.read(buf))!=-1){ out.write(buf,0,len); System.out.println("read!"); } in.close(); out.close(); return Action.SUCCESS; } public File getFile() { return file; } public void setFile(File file) { this.file = file; } public String getFileFileName() { return fileFileName; } public void setFileFileName(String fileFileName) { this.fileFileName = fileFileName; } public String getFileContentType() { return fileContentType; } public void setFileContentType(String fileContentType) { this.fileContentType = fileContentType; } } |
JSP页面要点,多个<input type="file"
name="file" >,它们的name都是file.
写一个JSP页面,内嵌一些JS脚本,添加这个上述input标签
<body> <form action="bacthUpload.action" method="post"enctype="multipart/form-data"> <table id="tabid"> <tr> <td><a href="javascript:void(0)" onclick="demo()">添加附件</a></td> </tr> </table> <input type="submit" value="上传" /> </form> </body> <!-- 通过表单对象创建行对象,在通过行对象创建列对象,创建两个,一个用于删除,一个用于添加附件 --> <script type="text/javascript"> function demo() { var oTabNode = document.getElementById("tabid");//拿到表格对象为了创建行 var oTrNode = oTabNode.insertRow();//通过表格创建行 var oTdNode_file= oTrNode.insertCell();//通过行创建单元格 var oTdNode_del = oTrNode.insertCell();//通过行创建列 oTdNode_file.innerHTML = "<input type='file' name='file'/>"; oTdNode_del.innerHTML = "<a href='javascript:void(0)' onclick='deletee(this)'>删除文件</a>"; } function deletee(node){ oTrNode = node.parentNode.parentNode;//a的父是td,td的父是tr oTrNode.parentNode.removeChild(oTrNode); } </script> |
<action name="bacthUpload" class="action.batchUploadAction" method="batchUpload"> <result>/success.jsp</result> <!--配置上传拦截器最大上传限制是20M,不允许超过struts的静态属性 --> <interceptor-ref name="fileUpload" > <param name="maximumSize">20971520</param> </interceptor-ref> <interceptor-ref name="defaultStack"/> </action> |
package action; 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 javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionSupport; public class batchUploadAction extends ActionSupport { private static final long serialVersionUID = 1L; private File[] file;//与JSP页面的表单元素名一致 // 文件名 private String[] fileFileName; // 文件类型 private String[] fileContentType; public String batchUpload() throws IOException { HttpServletRequest request = ServletActionContext.getRequest(); @SuppressWarnings("deprecation") String path = request.getRealPath("/upload"); for (int i = 0; i < file.length; i++) { InputStream in = new FileInputStream(file[i]);//根据数组中的每个对象关联一个读取流 System.out.println("上传文件存在吗?:" + file[i].exists()); File file = new File(path, fileFileName[i]);//为每一个文件关联一个相对应的文件名对象 OutputStream out = new FileOutputStream(file);//根据文件名创建输出流 System.out.println("上传文件保存的路径:" + file); int len = 0; byte[] buf = new byte[1024]; while ((len = in.read(buf)) != -1) { out.write(buf, 0, len); } in.close(); out.close(); } return Action.SUCCESS; } public File[] getFile() { return file; } public void setFile(File[] file) { this.file = file; } public String[] getFileFileName() { return fileFileName; } public void setFileFileName(String[] fileFileName) { this.fileFileName = fileFileName; } public String[] getFileContentType() { return fileContentType; } public void setFileContentType(String[] fileContentType) { this.fileContentType = fileContentType; } } |
相关文章推荐
- struts2学习笔记--上传单个和批量文件示例
- 【J2EE核心开发学习笔记 012】Struts2文件的上传与下载
- struts2第十六讲学习笔记,文件下载
- [Struts2]struts2 实现文件上传【学习笔记】
- struts2学习笔记--上传单个和批量文件示例
- 黑马程序员---struts2学习笔记之五(文件上传)
- struts2学习笔记之十:文件上传
- struts2学习笔记之十七(上传文件)
- Struts2学习笔记之文件的上传与下载
- struts2学习笔记--上传单个和批量文件示例
- 文件的上传下载---struts2学习笔记
- Struts2学习笔记14:Struts2的文件上传和下载【续】
- Struts2.x 学习笔记 之 文件上传和下载
- struts2学习笔记--上传单个和批量文件示例
- Struts2学习笔记之文件上传
- Struts2学习笔记之文件的上传与下载
- Struts2学习笔记15:Struts2的文件上传和下载【续】二
- struts2 学习笔记(三)——文件的上传和下载
- 【原创】Struts2学习笔记之文件的上传与下载
- [原创]java WEB学习笔记72:Struts2 学习之路-- 文件的上传下载,及上传下载相关问题