单文件上传
uploadAction
需要在WebRoot下添加upload文件夹
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport{
private File file;
//文件名
private String fileFileName;
//文件的类型
private String fileContentType;
//上传
public String upload() throws IOException {
HttpServletRequest request=ServletActionContext.getRequest();
String path=request.getServletContext().getRealPath("/upload");
InputStream is=new FileInputStream(file);
OutputStream os=new FileOutputStream(new File(path,fileFileName));
byte[] buffer=new byte[200];
int length=0;
while((length=is.read(buffer))!=-1){
os.write(buffer,0,length);
}
os.close();
is.close();
return Action.SUCCESS;
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
}
struts.xml
<struts>
<!--设置文件上传临时目录 -->
<constant name="struts.multipart.saveDir" value="F:\"></constant>
<!-- 设置文件上传的最大大小必选大于等于maximumSize -->
<constant name="struts.multipart.maxSize" value="20971520"></constant>
<package name="default" namespace="/" extends="struts-default">
<action name="upload" class="cn.sxt.action.UploadAction" method="upload">
<result>/index.jsp</result>
<interceptor-ref name="fileUpload">
<param name="maximumSize">20971520</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package>
</struts>
jsp页面
<body>
<form action="upload.action" method="post" enctype="multipart/form-data">
文件:<input type="file" name="file"><br>
<input type="submit" value="上传"/>
</form>
</body>
批量文件上传其实就是利用数组实现多文件上传
batchUpload.jsp页面(用了jquery)
<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
$(function(){
$('#btn').click(function(){
var field="<p><input type='file' name='file'/><input type='button' value='删除' onclick='removed(this)''/></p>";
$('#files').append(field);
});
});
function removed(o){
$(o).parent().remove();
}
</script>
</head>
<body>
<form action="batch.action" method="post" enctype="multipart/form-data">
文件:<input type="file" name="file"><input type="button" id="btn" value="添加"/>
<div id="files"></div>
<input type="submit" value="上传"/>
</form>
</body>
</html>
BatchUploadAction
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
public class BatchUploadAction extends ActionSupport{
private File[] file;
//文件名
private String[] fileFileName;
//文件的类型
private String[] fileContentType;
//上传
public String execute() throws IOException {
HttpServletRequest request=ServletActionContext.getRequest();
String path=request.getServletContext().getRealPath("/upload");
for(int i=0;i<file.length;i++){
InputStream is=new FileInputStream(file[i]);
OutputStream os=new FileOutputStream(new File(path,fileFileName[i]));
byte[] buffer=new byte[200];
int length=0;
while((length=is.read(buffer))!=-1){
os.write(buffer,0,length);
}
os.close();
is.close();
}
return Action.SUCCESS;
}
public File[] getFile() {
return file;
}
public void setFile(File[] file) {
this.file = file;
}
public String[] getFileFileName() {
return fileFileName;
}
public void setFileFileName(String[] fileFileName) {
this.fileFileName = fileFileName;
}
public String[] getFileContentType() {
return fileContentType;
}
public void setFileContentType(String[] fileContentType) {
this.fileContentType = fileContentType;
}
}
struts.xml
<action name="batch" class="cn.sxt.action.BatchUploadAction" >
<result>/index.jsp</result>
<interceptor-ref name="fileUpload">
<param name="maximumSize">20971520</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>