一、上传单个文件
1、upload.jsp
<body>
<!--
enctype 默认是:application/x-www-form-urlencoded
要把它改为 multipart/form-data
input 中的 type 要选择 file 类型
-->
<form action="FileUpload" method="post" enctype="multipart/form-data">
请选择上传的文件:<br/><br/>
<input type="file" name="upload"/>
<br/><br/>
<input type="submit" value="确定"/>
</form>
</body>
2、FileUploadAction.java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import com.opensymphony.xwork2.ActionSupport;
/**
* 文件上传的Action
* @author hanwen
*
* 2015-5-22 下午01:43:55
*/
public class FileUploadAction extends ActionSupport{
private File upload;//接收上传的文件,该属性必须和 jsp 页面 input 标签中的 name 属性值相同
private String uploadFileName;//接收上传文件的名字,命名格式为[upload]FileName
private String uploadContentType;//接收上传文件的类型,命名格式为[upload]ContentType
public String execute(){
//文件复制
File destFile = new File("E:\\upfile",uploadFileName);
//判断文件是否存在,如果不存在则创建
if(!destFile.exists()){
try {
destFile.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//输入流
FileInputStream fis = null;
//输出流
FileOutputStream fos = null;
try {
fis = new FileInputStream(upload);
fos = new FileOutputStream(destFile);
byte[] buf = new byte[1024];//缓冲数组
int len = 0;//存储每次实际读取的字节数
try {
while((len = fis.read(buf, 0, buf.length)) != -1){
fos.write(buf, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
try {
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return "success";
}
public File getUpload() {
return upload;
}
public void setUpload(File upload) {
this.upload = upload;
}
public String getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
}
3、struts.xml
<!-- 在 constant 标签处设置,value 表示整个表单(包括文件)上传的大小值,单位为字节 -->
<constant name="struts.multipart.maxSize" value="100000000000000"></constant>
<package name="default" namespace="/" extends="struts-default">
<!-- 上传单个文件 -->
<action name="FileUpload" class="com.hanwen.action.FileUploadAction">
<!-- 设置最大上传的文件的大小,引用系统的文件上传拦截器 -->
<interceptor-ref name="fileUpload">
<!-- 设置允许上传的文件的大小,单位为字节 -->
<param name="maximumSize">99999999999999</param>
<!-- 允许上传的类型,不写则默认为Struts2允许的类型 -->
<param name="allowedTypes"></param>
</interceptor-ref>
<!-- 引入默认的拦截器栈 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<result>
<!-- 上传成功后你要跳转的页面 -->
/success.jsp
</result>
</action>
</package>
二、上传多个文件
1、upload.jsp
<body>
<!-- 和上传单个文件类似,你想上传多少个文件就写多少个 input 即可 -->
<form action="FileUpload" method="post" enctype="multipart/form-data">
请选择上传的文件:<br/><br/>
<input type="file" name="upload"/>
<br/><br/>
<input type="file" name="upload"/>
<br/><br/>
<input type="file" name="upload"/>
<br/><br/>
<input type="submit" value="确定"/>
</form>
</body>
2、ListFileUploadAction.java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
/**
* 多文件上传Action
* @author hanwen
*
* 2015-5-22 下午04:02:01
*/
public class ListFileUploadAction extends ActionSupport{
private List<File> upload;//接收上传的文件,该属性必须和 jsp 页面 input 标签中的 name 属性值相同
private List<String> uploadFileName;//接收上传的文件的名字,命名格式为[upload]FileName
private List<String> uploadContentType;//接收上传的文件的类型,命名格式为[upload]ContentType
public String execute(){
for(int i = 0; i < upload.size(); i++){
//文件复制
File destFile = new File("E:\\upfile",uploadFileName.get(i));
//判断文件是否存在,如果不存在就创建
if(!destFile.exists()){
try {
destFile.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//输入流
FileInputStream fis = null;
//输出流
FileOutputStream fos = null;
try {
//把上传的文件输入到缓存中
fis = new FileInputStream(upload.get(i));
//把缓存中的文件输出到指定的路径中
fos = new FileOutputStream(destFile);
//缓冲数组
byte[] buf = new byte[1024];
//存储每次实际读取的字节数
int len = 0;
try {
while((len = fis.read(buf, 0, buf.length)) != -1){
fos.write(buf, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
try {
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return "success";
}
public List<File> getUpload() {
return upload;
}
public void setUpload(List<File> upload) {
this.upload = upload;
}
public List<String> getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(List<String> uploadFileName) {
this.uploadFileName = uploadFileName;
}
public List<String> getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(List<String> uploadContentType) {
this.uploadContentType = uploadContentType;
}
}
3、在 struts.xml 中的配置和上面的配置一样