upload.jsp
<%@ page language="java" pageEncoding="gb2312"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<html>
<head>
<title>JSP for UploadForm form</title>
</head>
<body>
<html:form action="/upload" method="post" enctype="multipart/form-data">
选择上传的文件:<html:file property="myfile"></html:file>
<html:submit value="上传"/>
</html:form>
</body>
</html>
-------------------------------------------------------------‘
UploadForm.java
package prj18.form;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;
public class UploadForm extends ActionForm {
private FormFile myfile;
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
// TODO Auto-generated method stub
return null;
}
public void reset(ActionMapping mapping, HttpServletRequest request) {
// TODO Auto-generated method stub
}
public FormFile getMyfile() {
return myfile;
}
public void setMyfile(FormFile myfile) {
this.myfile = myfile;
}
}
UploadAction.java
package prj18.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;
import prj18.form.UploadForm;
public class UploadAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
UploadForm uploadForm = (UploadForm) form;// TODO Auto-generated method stub
FormFile file=uploadForm.getMyfile();
//得到文件的基本信息;
String name=file.getFileName();//文件名
int size=file.getFileSize();//文件大小
String type=file.getContentType();//文件类型
System.out.println(name);
System.out.println(size);
System.out.println(type);
return new ActionForward("/upload.jsp");
}
}
遇到问题:
在JSP的表单部分没有加:
enctype="multipart/form-data"
所以报错:java.lang.IllegalArgumentException: argument type mismatch
要是要限制上传文件的大小,应该在配制文件中加:
<controller maxFileSize="10M"></controller>
这是限制文件不得超过10M
----------------------------------------------------------------
从上面可知:可以得到上传的信息:
那么怎么把文件保存在服务器端呢?看下面。
将上面的UploadAction.java改成下面的:UploadAction.java
package prj18.action;
import java.io.FileOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;
import prj18.form.UploadForm;
public class UploadAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
UploadForm uploadForm = (UploadForm) form;// TODO Auto-generated method stub
FormFile file=uploadForm.getMyfile();
/*
String name=file.getFileName();
int size=file.getFileSize();
String type=file.getContentType();
System.out.println(name);
System.out.println(size);
System.out.println(type);*/
//保存在服务器端
FileOutputStream fos=null;
try{
byte[] data = file.getFileData();//取得数据
String fileName= file.getFileName();//取得上传的文件名
fos=new FileOutputStream(fileName);//将上传后的文件写到指定文件中
//[这是保存在服务器上的名字与上传的名字相同]
fos.write(data);//写数据
}catch(Exception ex){ex.printStackTrace();}
finally{
try{fos.close();
}catch(Exception ex){
}
}
return new ActionForward("/upload.jsp");
}
}
可以在默认的路径下找到上传后的文件。默认的路径为:%tomcat%/bin下。
一般要把上传的文件放到指定的路径下,如何实现呢?
--------------------------------------------------------------------------------------------
fos=new FileOutputStream(fileName);//将上传后的文件写到指定文件中
//[这是保存在服务器上的名字与上传的名字相同]
中加一个路径名,那怎么加一个路径名。
方法1、可以加入绝对路径。任意指定的路径。
fos=new FileOutputStream(“E:/apache-tomcat-6.0.14/webapps/prj18”+fileName);//将上传后的文件写到指定文件中
//[这是保存在服务器上的名字与上传的名字相同]
方法2、
try {
byte[] data = file.getFileData();
String fileName = file.getFileName();
ServletContext application = this.getServlet().getServletContext();
String realPath = application.getRealPath("/FILES/");
fos = new FileOutputStream(realPath + "/" + fileName);
fos.write(data);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
fos.close();
} catch (Exception ex) {
}
}