一、下图所示为效果图
二、先来看看一下我的项目结构
三、单文件上传
1.单文件上传页面:index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
<form action="file/uploadAction" method="post" enctype="multipart/form-data">
<p>
名称:<input type="text" name="name"/>
</p>
<p>
上传:<input type="file" name="upload">
</p>
<input type="submit" value="ok">
</form>
</body>
</html>
2.处理上传的Action:UploadAction.java
package com.zb.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import org.apache.commons.io.IOUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport{
private String name;
private File upload;
private String uploadContentType;
private String uploadFileName;
public String up(){
System.out.println(name);
System.out.println(upload);
System.out.println(uploadContentType);
System.out.println(uploadFileName);
//上传文件夹的路径
String path=ServletActionContext.getServletContext().getRealPath("upload/");
System.out.println(path);
try {
FileInputStream fis = new FileInputStream(upload);
FileOutputStream fos=new FileOutputStream(path+"/"+uploadFileName);
IOUtils.copy(fis, fos);
fos.close();
fis.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public File getUpload() {
return upload;
}
public void setUpload(File upload) {
this.upload = upload;
}
public String getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
public String getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
}
3.上传成功跳转页面显示ok.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'ok.jsp' starting page</title>
</head>
<body>
文件名:<s:property value="uploadFileName"></s:property>
</body>
</html>
四、多文件上传(只要在单文件上传的基础上做一些变动就好了)
1.多文件上传页面manyIndex.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
<form action="file/manyUploadAction" method="post" enctype="multipart/form-data">
<p>
名称:<input type="text" name="name"/>
</p>
<p>
上传:<input type="file" name="upload"><br/>
上传:<input type="file" name="upload"><br/>
上传:<input type="file" name="upload"><br/>
</p>
<input type="submit" value="ok">
</form>
</body>
</html>
2.多文件处理的Action
package com.zb.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.List;
import org.apache.commons.io.IOUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class ManyUploadAction extends ActionSupport{
private String name;
private List<File> files;
private List<String> uploadContentType;
private List<String> uploadFileName;
public String up(){
System.out.println(name);
System.out.println(files);
System.out.println(uploadContentType);
System.out.println(uploadFileName);
//上传文件夹的路径
String path=ServletActionContext.getServletContext().getRealPath("upload/");
System.out.println(path);
try {
for (int i = 0; i < files.size(); i++) {
FileInputStream fis = new FileInputStream(files.get(i));
FileOutputStream fos=new FileOutputStream(path+"/"+uploadFileName.get(i));
IOUtils.copy(fis, fos);
fos.close();
fis.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<File> getFiles() {
return files;
}
public void setFiles(List<File> files) {
this.files = files;
}
public List<String> getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(List<String> uploadContentType) {
this.uploadContentType = uploadContentType;
}
public List<String> getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(List<String> uploadFileName) {
this.uploadFileName = uploadFileName;
}
}
3.多文件上传成功显示页面manyOk.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'manyOk.jsp' starting page</title>
</head>
<body>
<h1>上传成功</h1>
<!-- 遍历值 -->
<s:iterator value="uploadFileName" id="f">
<!-- 文件名 -->
<s:property value="#f"/><br/>
</s:iterator>
</body>
</html>
下次更新文件下载,如有不足,欢迎指正。