struts2文件上传
2016-04-12 10:16
465 查看
1.* 单文件上传:
在javabean类中声明相关属性
(1)可以将上传文件的属性(文件,文件名,文件类型)封装到javabean中(但必须保证封装到javabean中上传文件的属性名必须与页面上上传文件标签的属性名相同)
(2)上传文件的属性设置:
文件类型:【同名属性】+ContentType(此时同名属性为uploads)
文件名:【同名属性】+FileName(此时同名属性为uploads)
封装的javabean代码实现:
package com.xing.elec.domain;
import java.io.File;
import java.io.InputStream;
import java.io.Serializable;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
@SuppressWarnings("serial")
public class ElecUser implements Serializable{
private String userID; //主键ID
private String jctID; //所属单位code
private String jctUnitID;
//所属单位的单位名称(联动)
private String userName; //用户姓名
private String logonName;
//登录名
private String logonPwd; //密码
private String sexID; //性别
private Date birthday; //出生日期
private String address; //联系地址
/*此处省略get*** set** 方法*/
//上传的文件(File类型)
private File uploads;
//上传文件的文件名
private String uploadsFileName;
//上传文件的文件类型
private String uploadsContentType;
//文件ID
private String fileID;
//文件下载的流的属性
private InputStream inputStream;
public String getFileID() {
return fileID;
}
public void setFileID(String fileID) {
this.fileID = fileID;
}
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
public File[] getUploads() {
return uploads;
}
public void setUploads(File[] uploads) {
this.uploads = uploads;
}
public String[] getUploadsFileName() {
return uploadsFileName;
}
public void setUploadsFileName(String[] uploadsFileName) {
this.uploadsFileName = uploadsFileName;
}
public String[] getUploadsContentType() {
return uploadsContentType;
}
public void setUploadsContentType(String[] uploadsContentType) {
this.uploadsContentType = uploadsContentType;
}
}
页面上显示上传文件的标签
<input name="uploads" type="file" size="25" id=”tempRow“>"
在业务方法上处理上传文件
(1)获取上传文件 ,上传文件的名字,上传文件的类型
//获取上传的文件
File uploads=elecUser.getUploads();
//获取上传的文件名
String fileNames=elecUser.getUploadsFileName();
//获取上传的文件类型
String contentTypes=elecUser.getUploadsContentType();
(2)获取上传文件的路径
String basepath=ServletActionContext.getServletContext().getRealPath("/upload");
(3)在目标文件夹内,创建一个与上传文件同名的文件
File file2=new File(basepath);
(4)文件上传
<1>通过FileUtils工具类提供copyFile()方法,将临时文件内容拷贝到目标文件夹下的那个同名的文件(该方法需要清除临时文件)
FileUtils.copyFile(file1,file2); //将file1拷贝到file2中
file1.delete(); //清除临时文件
<2>通过File中的一个方法来实现文件上传(该方法不用不会产生临时文件 也就是说不用删除临时文件)
file1.renameTo(file2);
* 设置上传文件的总大小
* 在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中声明的相关属性,类型改成数组;
* 在业务方法中,相关处理流程改成单文件上传的循环。
在javabean类中声明相关属性
(1)可以将上传文件的属性(文件,文件名,文件类型)封装到javabean中(但必须保证封装到javabean中上传文件的属性名必须与页面上上传文件标签的属性名相同)
(2)上传文件的属性设置:
文件类型:【同名属性】+ContentType(此时同名属性为uploads)
文件名:【同名属性】+FileName(此时同名属性为uploads)
封装的javabean代码实现:
package com.xing.elec.domain;
import java.io.File;
import java.io.InputStream;
import java.io.Serializable;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
@SuppressWarnings("serial")
public class ElecUser implements Serializable{
private String userID; //主键ID
private String jctID; //所属单位code
private String jctUnitID;
//所属单位的单位名称(联动)
private String userName; //用户姓名
private String logonName;
//登录名
private String logonPwd; //密码
private String sexID; //性别
private Date birthday; //出生日期
private String address; //联系地址
/*此处省略get*** set** 方法*/
//上传的文件(File类型)
private File uploads;
//上传文件的文件名
private String uploadsFileName;
//上传文件的文件类型
private String uploadsContentType;
//文件ID
private String fileID;
//文件下载的流的属性
private InputStream inputStream;
public String getFileID() {
return fileID;
}
public void setFileID(String fileID) {
this.fileID = fileID;
}
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
public File[] getUploads() {
return uploads;
}
public void setUploads(File[] uploads) {
this.uploads = uploads;
}
public String[] getUploadsFileName() {
return uploadsFileName;
}
public void setUploadsFileName(String[] uploadsFileName) {
this.uploadsFileName = uploadsFileName;
}
public String[] getUploadsContentType() {
return uploadsContentType;
}
public void setUploadsContentType(String[] uploadsContentType) {
this.uploadsContentType = uploadsContentType;
}
}
页面上显示上传文件的标签
<input name="uploads" type="file" size="25" id=”tempRow“>"
在业务方法上处理上传文件
(1)获取上传文件 ,上传文件的名字,上传文件的类型
//获取上传的文件
File uploads=elecUser.getUploads();
//获取上传的文件名
String fileNames=elecUser.getUploadsFileName();
//获取上传的文件类型
String contentTypes=elecUser.getUploadsContentType();
(2)获取上传文件的路径
String basepath=ServletActionContext.getServletContext().getRealPath("/upload");
(3)在目标文件夹内,创建一个与上传文件同名的文件
File file2=new File(basepath);
(4)文件上传
<1>通过FileUtils工具类提供copyFile()方法,将临时文件内容拷贝到目标文件夹下的那个同名的文件(该方法需要清除临时文件)
FileUtils.copyFile(file1,file2); //将file1拷贝到file2中
file1.delete(); //清除临时文件
<2>通过File中的一个方法来实现文件上传(该方法不用不会产生临时文件 也就是说不用删除临时文件)
file1.renameTo(file2);
* 设置上传文件的总大小
* 在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中声明的相关属性,类型改成数组;
* 在业务方法中,相关处理流程改成单文件上传的循环。
相关文章推荐
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)【转载】
- SpringMVC ExceptionHandler 可以传递的参数及返回值
- Struts2中的OGNL详解
- win7下myeclipse 9.0破解(图解)
- Eclipse快捷键大全(转载)
- Java笔试题分类总结--String
- myeclipse 安装SVN插件
- 对比synchronized与java.util.concurrent.locks.Lock 的异同
- SPRING MVC乱码解决
- Spring框架事务管理之二:事务管理器与事务API的配置
- 日志记录的作用和方法 java
- 美图2016校招实习笔试java
- Java集合---ConcurrentHashMap原理分析
- Struts2 ajax+json账户唯一性验证
- 码农小汪-spring框架学习之8- Using JSR 330 Standard Annotations @Inject and @Named
- HashMap源码注解 之 get()方法(五)
- JAVA设计原则与设计模式
- eclipse配置maven + 创建maven项目(一)
- JAVAThread 多线程学习
- JavaWeb总结(五)—Cookie