(七)Struts2文件上传
来源:互联网 发布:windows xp sp3 编辑:程序博客网 时间:2024/04/29 19:15
单文件上传的upload.jsp页面
<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%><%@ taglib uri="/struts-tags" prefix="s"%><html> <head> <title>My JSP 'index.jsp' starting page</title> </head> <body> <form action="${pageContext.request.contextPath}/upload/uploadAction_saveFile.action" name="form1" method="post" enctype="multipart/form-data" > 上传文件名称:<input type="file" name="uploadImage"> <input type="submit" value="上传"> </form> </body></html>
对应的UploadAction
package cn.yht.upload;import java.io.File;import java.io.IOException;import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import org.apache.commons.io.FileUtils;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class UploadAction extends ActionSupport {/* * 上传文件的存储的临时文件: * E:\\TOOLS\\apache-tomcat-6.0.35\\work\\Catalina\\localhost\\itcast1105_struts\\upload__5fee1dc7_13ad3d1835b__8000_00000000.tmp */private File uploadImage;//上传文件的类型:text/plainprivate String uploadImageContentType;//上传文件的真是名称private String uploadImageFileName;public File getUploadImage() {return uploadImage;}public void setUploadImage(File uploadImage) {this.uploadImage = uploadImage;}public String getUploadImageContentType() {return uploadImageContentType;}public void setUploadImageContentType(String uploadImageContentType) {this.uploadImageContentType = uploadImageContentType;}public String getUploadImageFileName() {return uploadImageFileName;}public void setUploadImageFileName(String uploadImageFileName) {this.uploadImageFileName = uploadImageFileName;}public String saveFile(){System.out.println("UploadAction *********** saveFile()");ServletContext sc = ServletActionContext.getServletContext();String path = sc.getRealPath("/fileupload");File file = new File(path, uploadImageFileName);try {FileUtils.copyFile(uploadImage, file);} catch (IOException e) {e.printStackTrace();}uploadImage.delete();return "success";}}
多文件上传的uploads.jsp页面
<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%><%@ taglib uri="/struts-tags" prefix="s"%><html> <head> <title>My JSP 'index.jsp' starting page</title> </head> <body> <form action="${pageContext.request.contextPath}/upload/uploadsAction_saveFiles.action" name="form1" method="post" enctype="multipart/form-data" > 上传文件名称:<input type="file" name="uploadImages"><br> 上传文件名称:<input type="file" name="uploadImages"><br> 上传文件名称:<input type="file" name="uploadImages"><br> <input type="submit" value="上传"> </form> </body></html>
对应的UploadsAction
package cn.yht.upload;import java.io.File;import java.io.IOException;import javax.servlet.ServletContext;import org.apache.commons.io.FileUtils;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class UploadsAction extends ActionSupport {private File [] uploadImages;private String [] uploadImagesContentType;private String [] uploadImagesFileName;public String saveFiles(){System.out.println("UploadsAction ******** saveFiles()");ServletContext sc = ServletActionContext.getServletContext();String path = sc.getRealPath("/fileupload");for(int i=0;i<uploadImages.length;i++){File file = new File(path, uploadImagesFileName[i]);try {FileUtils.copyFile(uploadImages[i], file);} catch (IOException e) {e.printStackTrace();}uploadImages[i].delete();}return "success";}public File[] getUploadImages() {return uploadImages;}public void setUploadImages(File[] uploadImages) {this.uploadImages = uploadImages;}public String[] getUploadImagesContentType() {return uploadImagesContentType;}public void setUploadImagesContentType(String[] uploadImagesContentType) {this.uploadImagesContentType = uploadImagesContentType;}public String[] getUploadImagesFileName() {return uploadImagesFileName;}public void setUploadImagesFileName(String[] uploadImagesFileName) {this.uploadImagesFileName = uploadImagesFileName;}}
对应的struts_upload.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="upload" namespace="/upload" extends="struts-default"><action name="uploadAction_saveFile" class="cn.yht.upload.UploadAction" method="saveFile"><result name="success">/upload/success.jsp</result><result name="input">/upload/error.jsp</result><!-- 配置拦截器的参数,这里是文件上传拦截器 --><interceptor-ref name="defaultStack"> <!-- 配置文件上传拦截器的参数 * 与定义参数的顺序无关 * 允许的类型(allowedTypes)和允许的扩展名(allowedExtensions)必须保持一致 --> <!-- * 配置上传文件的大小 * struts.xml文件中配置的是上传文件的总大小 * 这里配置的是上传文件的单个大小 --> <param name="fileUpload.maximumSize">20971520</param> <!-- 配置上传文件允许的类型,如果配置多个值的话,用","隔开 --> <param name="fileUpload.allowedTypes">text/plain,application/msword</param> <!-- 配置上传文件的扩展名,如果配置多个值的话,用","隔开 --> <param name="fileUpload.allowedExtensions">.txt</param> </interceptor-ref></action><action name="uploadsAction_saveFiles" class="cn.yht.upload.UploadsAction" method="saveFiles"><result name="success">/upload/success.jsp</result><result name="input">/upload/error.jsp</result></action></package></struts>
总结:
struts2框架的文件上传:
* 单文件上传:
* 在动作类action中声明相关属性:
* 在动作类action中,要声明与页面中表单name属性同名的属性,同名的属性的类型时File类型;
* 在动作类action中,要声明[同名的属性]ContentType,类型时String类型;
* 在动作类action中,要声明[同名的属性]FileName,类型时String类型
* 给所有属性提供get和set方法
* 在业务方法中,处理文件上传:
* 获取要上传文件的路径,保存的位置
* 在目标文件夹内,创建一个与上传文件同名的文件
* 通过FileUtils工具类提供copyFile()方法,将临时文件内容拷贝到目标文件夹下的那个同名的文件
* 设置上传文件的总大小
* 在struts.xml文件中,<constant name="struts.multipart.maxSize" value="2097152000"></constant>
* 设置上传文件的大小、类型和扩展名:
* 在自定义的配置文件中,在action标签下:
<!-- 配置拦截器的参数,这里是文件上传拦截器 -->
<interceptor-ref name="defaultStack"> <!-- 配置文件上传拦截器的参数 * 与定义参数的顺序无关 * 允许的类型(allowedTypes)和允许的扩展名(allowedExtensions)必须保持一致 --> <!-- * 配置上传文件的大小 * struts.xml文件中配置的是上传文件的总大小 * 这里配置的是上传文件的单个大小 --> <param name="fileUpload.maximumSize">20971520</param> <!-- 配置上传文件允许的类型,如果配置多个值的话,用","隔开 --> <param name="fileUpload.allowedTypes">text/plain,application/msword</param> <!-- 配置上传文件的扩展名,如果配置多个值的话,用","隔开 --> <param name="fileUpload.allowedExtensions">.txt</param> </interceptor-ref>
* 自定义上传文件的错误提示信息:
* 在动作类action同目录下,创建一个名为fileuploadmessage.properties资源文件(名为自定义)
* 改资源文件配置如下:
struts.messages.error.uploading=Error uploading: {0} struts.messages.error.file.too.large=File too large: {0} "{1}" "{2}" {3} struts.messages.error.content.type.not.allowed=Content-Type not allowed: {0} "{1}" "{2}" {3} struts.messages.error.file.extension.not.allowed=File extension not allowed: {0} "{1}" "{2}" {3}
* 多文件上传:
* 所有流程于配置都与单文件上传一致。
* 需要注意的是:
* 在页面中,虽然是多文件上传,但是页面中表单的name属性的值必须保持一致;
* 在动作类action中声明的相关属性,类型改成数组;
* 在业务方法中,相关处理流程改成单文件上传的循环。
- (七)Struts2文件上传
- Struts2学习笔记(七) 上传文件
- 七、Struts2之文件上传与下载
- struts2文件上传(多文件上传)
- Struts2学习篇(七) 上传任意多个文件
- Struts2 文件上传(一)
- struts2文件上传(服务器端)
- struts2上传文件(进度条)
- Struts2文件上传(一)
- struts2文件上传(一)
- (9)Struts2文件上传
- Struts2(四)文件上传
- struts2 - uploadfile(上传文件)
- struts2上传文件(2)
- struts2文件上传(单文件部分)
- 七牛上传文件(JS实现)
- 七牛上传文件(JS实现)
- 七牛文件上传
- 国内外知名IT科技博客(强烈推荐)
- UML统一建模语言初学
- WINCE6.0 远程工具,不能使用ActiveSync连接的问题
- 哈夫曼编码
- Android编程几个有用的代码片段
- (七)Struts2文件上传
- wordpress后台输入帐号密码登陆后无提示返回登陆界面
- CCProxy 6.2 溢出分析
- flexbuilder4 svn插件的安装
- Hibernate中的多对一和多对多关系
- (应用排序算法编程7.2.2)POJ 2299 Ultra-QuickSort(使用归并排序来计算逆序对的个数)
- 图片预加载-lowsrc
- Unity3D 网络通信_HTTP协议:获取网络图片、内容
- 如何在google code 上创建开源项目(项目托管)