struts2文件上传

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值