文件上传
//准备文件
1.上传单个文件页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>文件上传</title>
</head>
<body>
<!-- 上传页面的准备 -->
<s:form action="upload.action" enctype="multipart/form-data" method="post">
<s:textfield name ="title" label ="标题"/><br/>
<s:file name ="upload" label="选择文件"/><br/>
<s:submit name ="submit" value ="上传文件"/>
</s:form>
</body>
</html>
2.在struts.xml中配置相应的action
<action name ="upload" class="action.UploadAction">
<!--通过param参数设置保存目录的路径 -->
<param name="savePath">/image</param>
<result name="success">/upload_success.jsp</result>
</action>
3.在根据action节点找对应的类
package action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport{
//封装上传文件的属性
private File upload;
//封装上传文件的类型
private String uploadContentType;
//封装上传文件的名称
private String uploadFileName;
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;
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}
//获取文件上传的路径
private String savePath;
@Override
public String execute() throws Exception {
//创建缓存数组
byte [] buffer =new byte[1024];
//读取文件
FileInputStream fis =new FileInputStream(getUpload());
//保存文件,并设置保存目录的路径
FileOutputStream fos =new FileOutputStream(getSavePath()+"\\"+this.getUploadFileName());
int length =fis.read(buffer);
while(length>0){
//每次写入length长度的内容
fos.write(buffer,0,length);
length=fis.read(buffer);
}
fis.close();
fos.flush();
fos.close();
return SUCCESS;
}
public String getSavePath(){
return ServletActionContext.getServletContext().getRealPath(savePath);
}
}
4.如果成功就去找成功页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>文件上传</title>
</head>
<body>
<!--成功页面 -->
上传文件成功!
您上传的文件是:<s:property value="uploadFileName"/><br/>
文件类型:<s:property value="uploadContentType"/>
</body>
</html>