您的位置:首页 > 编程语言 > Java开发

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中声明的相关属性,类型改成数组;

* 在业务方法中,相关处理流程改成单文件上传的循环。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: