upload.jsp
<%@page pageEncoding="utf-8"%>
<html>
<head></head>
<body>
<h1>上传文件示例</h1>
<form action="upload.action" enctype="multipart/form-data" method="post">
<input type="file" name="some"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
struts.xml:
<!-- 这是一个文件上传到小例子 --> <struts> <!-- 改变Struts2上传文件的最大限制 --> <constant name="struts.multipart.maxSize" value="5000000"></constant> <package name="demo" namespace="/demo" extends="struts-default"> <!-- 转到上传页面的Action --> <action name="toUpload"> <result name="success">/WEB-INF/upload.jsp</result> </action> <!-- 上传文件Action --> <action name="upload" class="com.tarena.action.UploadAction"> <interceptor-ref name="fileUpload"> <!-- 改变Action上传文件的限制 --> <param name="maximumSize">2000000</param> </interceptor-ref> <interceptor-ref name="basicStack"></interceptor-ref> <result name="success">/WEB-INF/ok.jsp</result> <result name="error">/WEB-INF/error.jsp</result> </action> </package> </struts>
Action:
public class UploadAction implements ServletContextAware {
// 输入属性
private File some;
private String someFileName;
private ServletContext ctx;
public String getSomeFileName() {
return someFileName;
}
public void setSomeFileName(String someFileName) {
this.someFileName = someFileName;
}
public File getSome() {
return some;
}
public void setSome(File some) {
this.some = some;
}
public String execute() {
System.out.println("SOME" + some);
System.out.println("FileName:" + someFileName);
if (some == null) {
return "error";
}
// 1、根据输入属性,构建存储的路径
// 指定上传文件名
String name = "upload_" + someFileName;
// 构建一个相对路径
String path = "upload/" + name;
// 根据相对路径,去构建绝对路径
path = ctx.getRealPath(path);
System.out.println("PATH:" + path);
// 2、根据存储的路径,将输入属性复制到路径下
FileUtil.copy(some, new File(path));
// 3、返回特征字符串,找Result
return "success";
}
public void setServletContext(ServletContext sc) {
ctx = sc;
}
}
FileUtil.java:提供文件复制
public class FileUtil {
public static boolean copy(File src, File dest) {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream(src));
bos = new BufferedOutputStream(new FileOutputStream(dest));
byte[] bts = new byte[1024];
int len = -1;
while ((len = bis.read(bts)) != -1) {
bos.write(bts, 0, len);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
可以参考http://www.blogjava.net/max/archive/2007/03/21/105124.html
转载于:https://blog.51cto.com/huing/1287548