我很确定您的代码。请按照以下步骤操作
-
下载 apache commons-fileupload 和 apache commons-io 的二进制分发包(FileUpload 依赖于 Commons IO,因此在继续之前,请确保您的类路径中的依赖项页面中提到了该版本。)
提取这两个发行版并将commons-fileupload-1.2.2.jar 和commons-io-2.0.1.jar 复制到WEB-INF/lib 文件夹下。
在Servlet中需要导入javax.servlet,javax.servlet.http,import java.io,java.util,org.apache.commons.fileupload,org.apache.commons.fileupload.servlet和org.apache.commons.fileupload.disk packages。
演示:
在WEB-INF/classes文件夹下创建一个servlet文件
package com.me;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.File;
import java.util.List;
import java.util.Iterator;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
public class FileUploadServlet extends HttpServlet
{
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
java.io.PrintWriter pw=response.getWriter();
final String SUCCESS="/success.jsp";
final String FAIL="/fail.jsp";
if(isMultipart)
{
try
{
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = upload.parseRequest(request);
pw.print("total : " + items.size());
Iterator iter = items.iterator();
while (iter.hasNext())
{
FileItem item = (FileItem) iter.next();
pw.print("total : " + item);
if(!item.isFormField())
{
String fileName = item.getName();
String destFilePath=getServletContext().getRealPath("/upload/" + fileName);
File uploadedFile = new File(destFilePath);
item.write(uploadedFile);
}
}
request.setAttribute("message","file has been uploaded successfully!");
}catch(Exception ex)
{
ex.printStackTrace();
request.setAttribute("message","Cannot upload : " + ex.getMessage());
getServletContext().getRequestDispatcher(FAIL).forward(request,response);
}
getServletContext().getRequestDispatcher(SUCCESS).forward(request,response);
}
}
}
在WEB-INF/web.xml中配置/注册servlet
<web-app>
<servlet>
<servlet-name>fileupload</servlet-name>
<servlet-class>com.me.FileUploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>fileupload</servlet-name>
<url-pattern>/fileupload</url-pattern>
</servlet-mapping>
</web-app>
视图的内容 (upload.jsp)。
注意:使用“multipart/form-data”设置 enctype 属性
<form method="post" enctype="multipart/form-data" action="fileupload">
<input type="file" name="file"/>
<input type="submit"/>
</form>
success.jsp 和 fail.jsp 的内容
${message}
在context 的根目录下创建一个名为upload 的文件夹。
JSP 版本(不推荐这种方式)
上传1.jsp
<form method="post" enctype="multipart/form-data"
action="showfile.jsp">
<input type="file" name="file"/>
<input type="submit"/>
</form>
showfile.jsp
<%@ page import="java.io.*" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Iterator" %>
<%@ page import="org.apache.commons.fileupload.FileItemFactory" %>
<%@ page import="org.apache.commons.fileupload.FileItem" %>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload" %>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory" %>
<%
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
String content="";
if(isMultipart)
{
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext())
{
FileItem item = (FileItem) iter.next();
if(!item.isFormField())
{
BufferedInputStream buff=new BufferedInputStream(item.getInputStream());
byte []bytes=new byte[buff.available()];
buff.read(bytes,0,bytes.length);
content=new String(bytes);
}
}
}
%>
Content of File:
<pre>
<%=content%>
</pre>