老师上课讲了两种方法,一种是绝对路径,一种是相对路径。绝对路径太简单了,就不说了。在做相对路径时,忽略了在WebRoot目录下建一个upload目录了,使得一直报错
D:\Tomcat8.0\apache-tomcat-8.0.24\webapps\StrutsUpload\upload\17234475223385572074.jpg (系统找不到指定的路径。)
哎!!上课没观察细节
index.jsp代码:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>文件上传</title>
</head>
<body>
<s:form action="myupload" method="post" enctype="multipart/form-data">
<s:file name="upload" label="上传的文件"></s:file>
<s:submit value="上传"></s:submit>
</s:form>
</body>
</html>
success.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>上传成功</title>
</head>
<body>
恭喜你!上传成功 <br>
</body>
</html>
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="default" extends="struts-default">
<action name="myupload" class="org.action.UploadAction">
<result name="success">/success.jsp</result>
</action>
</package>
<constant name="struts.multipart.saveDir" value="/tmp"></constant>
</struts>
StrutsUpload.action
package org.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport{
private File upload;
private String uploadFileName;
public String getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public File getUpload() {
return upload;
}
public void setUpload(File upload) {
this.upload = upload;
}
public String execute() throws Exception{
InputStream is=new FileInputStream(getUpload());
String directory="/upload";
String target=ServletActionContext.getServletContext().getRealPath(directory);//需要在webroot目录下创建一个upload目录
OutputStream os=new FileOutputStream(target+"\\"+uploadFileName);
byte buffer[]=new byte[1024];
int cnt=0;
while((cnt=is.read(buffer))>0){
os.write(buffer, 0, cnt);
}
os.close();is.close();
return "success";
}
}