在刚开始写上传文件的代码时候,出现了以下错误:
Servlet.service() for servlet default threw exception
java.io.FileNotFoundException: E:/学习软件/My Tools/tomcat-6.0.16/webapps/upload/picture/03.jpg (系统找不到指定的路径。)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at action.ResourceAction.execute(ResourceAction.java:147)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
红色部分表明了在服务器上没有picture这个文件夹(upload是工程名),所以要在WebRoot下新建一个文件夹:picture
下面附上上传文件(在这里是图片)代码:
UploadAction.java:
package action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
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;
private String savePath;
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;
}
@SuppressWarnings("deprecation")
public String getSavePath()
{ String realpath=ServletActionContext.getRequest().getRealPath(savePath);
String filePath=realpath+"/"+getUploadFileName();
return filePath;
}
public void setSavePath(String value)
{
this.savePath = value;
}
public String execute() throws Exception{
InputStream is=new FileInputStream(getUpload());
OutputStream os=new FileOutputStream(getSavePath());
byte []buffer=new byte[1024];
int count=0;
while((count=is.read(buffer))>0){
os.write(buffer, 0,count);
}
is.close();
os.close();
return SUCCESS;
}
}
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts 2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts 2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
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>addResource</title>
</head>
<body>
<form action="upload.action" method="post"
ENCTYPE="multipart/form-data">
资源名称:
<input type="text" name="name" size=20>
<br>
是否公共:
<input type="checkbox" name="ispublic" checked>
<br>
资源类型:
<input type="radio" name="classification" checcked>
视频
<input type="radio" name="classification">
音频
<input type="radio" name="classification">
图像
<input type="radio" name="classification">
其他
<br>
选择资源:
<input type="file" name="upload">
<br>
<input type="submit" value="开始上传">
</form>
</body>
</html>
success.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>
添加成功!<br>
<!-- 输出上传的表单里的文件属性 -->
文件名称:<s:property value="+name"/><br>
文件为:
<img src="<s:property value="'picture/'+uploadFileName"/>"/><br>
</body>
</html>
struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"/WEB-INF/classes/struts-2.0 .dtd" >
<struts>
<package name="default" extends="struts-default">
<!--以后在这里添加action-->
<action name="upload" class="action.UploadAction">
<param name="savePath">/picture</param>
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
ps:别忘了添加strtus的基本类库以及上传文件的类(commons-fileupload-1.2.1.jar
commons-io-1.4.jar
commons-logging-1.0.4.jar
freemarker-2.3.8.jar
mysql-connector-java-5.1.5-bin.jar
ognl-2.6.11.jar
struts2-core-2.0.14.jar
xwork-2.0.7.jar)