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();
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中声明的相关属性,类型改成数组;
* 在业务方法中,相关处理流程改成单文件上传的循环。
* 在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中声明的相关属性,类型改成数组;
* 在业务方法中,相关处理流程改成单文件上传的循环。