哪位大哥能给一个jsp实现上传文件功能的例子啊,我在网上搜了点资料,如下:
代码如下:test.html<%@ page language="java" import="java.util.*" contentType="text/html;charset=gbk" pageEncoding="gbk"%><html><body> <form action="MultipartTestServlet" enctype="multipart/form-data" method="post"> <input type="text" name="username" /><br /> <input type="file" name="myfile" /><br/> <input type="file" name="myfile" /><br/> <input type="submit" /> </form> <br/><br/><br/><br/> <form action="MultipartTestServlet2" enctype="multipart/form-data" method="post"> <input type="text" name="username" /><br /> <input type="file" name="myfile" /><br/> <input type="file" name="myfile" /><br/> <input type="submit" /> </form> <br/><br/><br/><br/> <form action="MultipartTestServlet3" enctype="multipart/form-data" method="post"> <input type="text" name="username" /><br /> <input type="file" name="myfile" /><br/> <input type="file" name="myfile" /><br/> <input type="submit" /> </form></body></html>//方法一、采用ServletFileUpload这种方式上传MultipartTestServlet.javapackage com.bug.servlet;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUpload;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.RequestContext;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import org.apache.commons.fileupload.servlet.ServletRequestContext;public class MultipartTestServlet extends HttpServlet {public MultipartTestServlet() {super();}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("gbk");RequestContext requestContext = new ServletRequestContext(request);if(FileUpload.isMultipartContent(requestContext)){ DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setRepository(new File("c:/tmp/")); ServletFileUpload upload = new ServletFileUpload(factory); //upload.setHeaderEncoding("gbk"); upload.setSizeMax(2000000); List items = new ArrayList(); try { items = upload.parseRequest(request); } catch (FileUploadException e1) { System.out.println("文件上传发生错误" + e1.getMessage()); } Iterator it = items.iterator(); while(it.hasNext()){ FileItem fileItem = (FileItem) it.next(); if(fileItem.isFormField()){ System.out.println(fileItem.getFieldName() + " " + fileItem.getName() + " " + new String(fileItem.getString().getBytes("iso8859-1"), "gbk")); }else{ System.out.println(fileItem.getFieldName() + " " + fileItem.getName() + " " + fileItem.isInMemory() + " " + fileItem.getContentType() + " " + fileItem.getSize()); if(fileItem.getName()!=null && fileItem.getSize()!=0){ File fullFile = new File(fileItem.getName()); File newFile = new File("c:/temp/" + fullFile.getName()); try { fileItem.write(newFile); } catch (Exception e) { e.printStackTrace(); } }else{ System.out.println("文件没有选择 或 文件内容为空"); } } }}}}里面好多方法都不明白什么意思,我看javadoc都是英文的,能给我解释一下里面的方法也行,如果有更简单的实现上传的更好,谢谢
代码如下:test.html<%@ page language="java" import="java.util.*" contentType="text/html;charset=gbk" pageEncoding="gbk"%><html><body> <form action="MultipartTestServlet" enctype="multipart/form-data" method="post"> <input type="text" name="username" /><br /> <input type="file" name="myfile" /><br/> <input type="file" name="myfile" /><br/> <input type="submit" /> </form> <br/><br/><br/><br/> <form action="MultipartTestServlet2" enctype="multipart/form-data" method="post"> <input type="text" name="username" /><br /> <input type="file" name="myfile" /><br/> <input type="file" name="myfile" /><br/> <input type="submit" /> </form> <br/><br/><br/><br/> <form action="MultipartTestServlet3" enctype="multipart/form-data" method="post"> <input type="text" name="username" /><br /> <input type="file" name="myfile" /><br/> <input type="file" name="myfile" /><br/> <input type="submit" /> </form></body></html>//方法一、采用ServletFileUpload这种方式上传MultipartTestServlet.javapackage com.bug.servlet;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUpload;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.RequestContext;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import org.apache.commons.fileupload.servlet.ServletRequestContext;public class MultipartTestServlet extends HttpServlet {public MultipartTestServlet() {super();}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("gbk");RequestContext requestContext = new ServletRequestContext(request);if(FileUpload.isMultipartContent(requestContext)){ DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setRepository(new File("c:/tmp/")); ServletFileUpload upload = new ServletFileUpload(factory); //upload.setHeaderEncoding("gbk"); upload.setSizeMax(2000000); List items = new ArrayList(); try { items = upload.parseRequest(request); } catch (FileUploadException e1) { System.out.println("文件上传发生错误" + e1.getMessage()); } Iterator it = items.iterator(); while(it.hasNext()){ FileItem fileItem = (FileItem) it.next(); if(fileItem.isFormField()){ System.out.println(fileItem.getFieldName() + " " + fileItem.getName() + " " + new String(fileItem.getString().getBytes("iso8859-1"), "gbk")); }else{ System.out.println(fileItem.getFieldName() + " " + fileItem.getName() + " " + fileItem.isInMemory() + " " + fileItem.getContentType() + " " + fileItem.getSize()); if(fileItem.getName()!=null && fileItem.getSize()!=0){ File fullFile = new File(fileItem.getName()); File newFile = new File("c:/temp/" + fullFile.getName()); try { fileItem.write(newFile); } catch (Exception e) { e.printStackTrace(); } }else{ System.out.println("文件没有选择 或 文件内容为空"); } } }}}}里面好多方法都不明白什么意思,我看javadoc都是英文的,能给我解释一下里面的方法也行,如果有更简单的实现上传的更好,谢谢
http://dev.csdn.net/article/73/73652.shtm
jsp:<%@ page contentType="text/html; charset=Windows-31J"%>
<%@ taglib uri="/struts-html" prefix="html" %>
<%@ taglib uri="/struts-logic" prefix="logic" %><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<title>upload</title>
</head>
<body>
<html:form action="/FileUpLoadAction" enctype="multipart/form-data">
<table >
<tr height="100">
</tr>
<tr align="left" height="25">
<td style="font-size:16;font-weight: bold;">file select</td>
</tr>
<tr align="center" style="font-size:15;font-weight: bold;" height="25">
<td width="150" height="23"><html:file property="formFile" size="120"></html:file> </td>
</tr>
<tr height="259"><td> </td>
</tr>
<tr>
<td>
<table cellpadding="5" cellspacing="2" border="0" bordercolor="white" width="780px">
</table>
</td>
</tr>
<tr>
<td> </td>
</tr>
</table>
<table width="780px" border="0" cellspacing="0" cellpadding="0">
<tr>
<td colspan="13" width="780px"> </td>
</tr>
<tr>
</tr>
<tr>
<td colspan="13" width="780px"> </td>
</tr>
<tr>
<td width="114">
<td width="6"> </td>
<td width="114"> </td>
<td width="6"> </td>
<td width="114"> </td>
<td width="6"> </td>
<td width="114"> </td>
<td width="6"> </td>
<td width="114"> </td>
<td width="6"> </td>
<td width="114"> </td>
<td width="6"> </td>
<td width="116">
<input type="submit" name="btn1" id="jikou" value="実行" />
</td>
</tr>
</table>
</html:form>
</body>
</html>
import org.apache.struts.upload.FormFile;public class FileUploadForm extends ActionForm{ /**
* strutsのFormFile機能で、一時保存のファイル
*/
private FormFile formFile = null; /**
* formFileを取得する
*
* @return formFile
*/
public final FormFile getFormFile() {
return formFile;
} /**
* formFileを設定する
*
* @param formFile 設定するformFile
*/
public final void setFormFile(FormFile formFile) {
this.formFile = formFile;
}
}
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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;public class FileUpLoadAction extends Action {
/**
* ログインスタンス。
*/
private static Log log = LogFactory.getLog(FileUpLoadAction.class);
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {
// 自動生成されたメソッド・スタブ
FileUploadForm fileForm = (FileUploadForm)form;
FormFile formFile = fileForm.getFormFile();
System.out.println("formName:" + formFile);
String saveFile = "C:\\test.txt";
InputStreamReader isr = new InputStreamReader(formFile.getInputStream(),"MS932");
BufferedReader buf = new BufferedReader(isr);
File file = new File(saveFile);
OutputStream os = new FileOutputStream(file);
String inputLine = null;
while((inputLine=buf.readLine())!=null){
os.write(inputLine.getBytes("UTF-8"));
}
if(log.isDebugEnabled()) {
log.debug("uploadend");
}
isr.close();
buf.close();
os.close();
return mapping.findForward("success");
}
}
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-nested.tld" prefix="nested" %>
<%@ page pageEncoding="GB2312" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html>
<head>
<title>文件上传</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head><body>
<p> </p>
<p align="center">上传文件选择</p>
<form method="post" action="uploadSucceed.do" enctype="multipart/form-data">
<table width="75%" border="1" align="center">
<tr>
<td><div align="center">1、
<input type="FILE" name="FILE1" size="30">
<input type="hidden" name="name">
</div></td>
</tr>
<tr>
<td><div align="center">2、
<input type="FILE" name="FILE2" size="30">
</div></td>
</tr>
<tr>
<td><div align="center">3、
<input type="FILE" name="FILE3" size="30">
</div></td>
</tr>
<tr>
<td><div align="center">4、
<input type="FILE" name="FILE4" size="30">
</div></td>
</tr>
<tr>
<td><div align="center">
<input type="submit" name="Submit" value="上传它!">
</div></td>
</tr>
</table>
</form>
</body>
</html:html>------------success.jsp
<%@ page contentType="text/html; charset=gb2312" language="java"
import="java.util.*,org.apache.commons.fileupload.*,java.io.*,org.apache.commons.lang.*,com.jspsmart.upload.*"
errorPage=""%><html>
<head>
<title>文件上传处理页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head> <body>
<%
// 新建一个SmartUpload对象
SmartUpload su = new SmartUpload();
// 上传初始化
su.initialize(pageContext);
// 设定上传限制
// 1.限制每个上传文件的最大长度。
// su.setMaxFileSize(10000);
// 2.限制总上传数据的长度。
// su.setTotalMaxFileSize(20000);
// 3.设定允许上传的文件(通过扩展名限制),仅允许doc,txt文件。
// su.setAllowedFilesList("doc,txt");
// 4.设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat,
//jsp,htm,html扩展名的文件和没有扩展名的文件。
// su.setDeniedFilesList("exe,bat,jsp,htm,html,,");
// 上传文件
su.upload();
// 将上传文件全部保存到指定目录
int count = su.save("D:/temp");
out.println(count+"个文件上传成功!<br>");
// 利用Request对象获取参数之值
//out.println("TEST="+su.getRequest().getParameter("TEST")
//+"<BR><BR>"); // 逐一提取上传文件信息,同时可保存文件。
for (int i=0;i<su.getFiles().getCount();i++)
{
com.jspsmart.upload.File file = su.getFiles().getFile(i);
// 若文件不存在则继续
if (file.isMissing()) continue; // 显示当前文件信息
out.println("<TABLE BORDER=1>");
out.println("<TR><TD>表单项名(FieldName)</TD><TD>"
+ file.getFieldName() + "</TD></TR>");
out.println("<TR><TD>文件长度(Size)</TD><TD>" +
file.getSize() + "</TD></TR>");
out.println("<TR><TD>文件名(FileName)</TD><TD>"
+ file.getFileName() + "</TD></TR>");
out.println("<TR><TD>文件扩展名(FileExt)</TD><TD>"
+ file.getFileExt() + "</TD></TR>");
out.println("<TR><TD>文件全名(FilePathName)</TD><TD>"
+ file.getFilePathName() + "</TD></TR>");
out.println("</TABLE><BR>"); // 将文件另存
// file.saveAs("/upload/" + myFile.getFileName());
// 另存到以WEB应用程序的根目录为文件根目录的目录下
// file.saveAs("/upload/" + myFile.getFileName(),
//su.SAVE_VIRTUAL);
// 另存到操作系统的根目录为文件根目录的目录下
// file.saveAs("c:\\temp\\" + myFile.getFileName(),
//su.SAVE_PHYSICAL); }
%>
</body>
</html>
注意:<controller maxFileSize="800K" bufferSize="400K" nocache="true"
processorClass="org.apache.struts.action.RequestProcessor" />
后写 fileItem.write(fullFile); 就不会写入文件!还有那是不是创建了一个
多余的文件吗?