写在前面:简单的上传文件的小demo,拿过来就可以用。有什么疑问可以加版主交流,共同学习。QQ:70747053。
之前在网上找了很多小例子,好多都有错,调试一段时间也烦了,索性自己写点。本来因为自己懒不是很想写,呵呵。就当温习了。
实现上传文件需要apache提供的两个jar包:
commons-fileupload-1.2.2.jar:http://commons.apache.org/fileupload/
commons-io-2.4.jar:http://commons.apache.org/io/
然后是简单的JSP页面:
需要注意的是:form表单里面有个属性enctype="multipart/form-data",这是必须写的。具体参考文档:http://www.w3school.com.cn/tags/att_form_enctype.asp
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>Insert title here</title>
- <script type="text/javascript">
- function reFun(msg) {
- alert(msg);
- }
- </script>
- <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
- <script type="text/javascript">
- function uploads() {
- $("#frmUpload")[0].submit();
- }
- </script>
- <style type="text/css">
- #load{
- background:url('img/loading.gif') no-repeat;
- height:80px;
- border:1px solid red;
- }
- </style>
- </head>
- <body>
- <div id="load"> </div>
- <form id="frmUpload" target="uploadframe" enctype="multipart/form-data"
- action="uploadFile" method="post">
- <input type="file" name="file" id="file" /> <input type="button"
- value="上传" id="uload" onclick="uploads()" />
- </form>
- <iframe id="uploadframe" name="uploadframe" style="display: none"></iframe>
- </body>
- </html>
这里面有些锦上添花的东西,各位看官各凭所好自己添或删。
然后就是Java类,处理发来的请求:
- package cn.upload.servlet;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- 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.disk.DiskFileItemFactory;
- import org.apache.commons.fileupload.servlet.ServletFileUpload;
- public class UploadServlet extends HttpServlet {
- /**
- *
- */
- private static final long serialVersionUID = -3159753144050260701L;
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- req.setCharacterEncoding("UTF-8");
- DiskFileItemFactory fac = new DiskFileItemFactory();
- ServletFileUpload fu = new ServletFileUpload(fac);
- resp.setCharacterEncoding("utf-8");
- resp.setContentType("text/html");
- try {
- //上传文件,并解析出所有的表单字段,包括普通字段和文件字段
- List list = fu.parseRequest(req);
- //下面对每个字段进行处理,分普通字段和文件字段
- Iterator i = list.iterator();
- while (i.hasNext()) {
- FileItem fileItem = (FileItem) i.next();
- if (!fileItem.isFormField()) {
- String name = fileItem.getName();
- InputStream is = fileItem.getInputStream();
- String p="D:/uploads/";
- File file = new File(p);
- if(!file.exists()){
- file.mkdirs();
- }
- OutputStream os = new FileOutputStream(p + name);
- try {
- byte[] b = new byte[2048];
- int index = is.read(b, 0, b.length);
- while (index != -1) {
- os.write(b, 0, index);
- index = is.read(b, 0, b.length);
- }
- resp.getWriter().println(
- "<script>window.parent.reFun('ok')</script>");
- } catch (Exception e) {
- e.printStackTrace();
- resp.getWriter()
- .println(
- "<script>window.parent.reFun('error')</script>");
- } finally {
- os.close();
- is.close();
- }
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- resp.getWriter().println(
- "<script>window.parent.reFun('error')</script>");
- }
- }
- }
有些注释没加,大家应该都可以看得懂,真心懒得加了。
还有就是web.xml里面的配置:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
- <servlet>
- <servlet-name>uploadFile</servlet-name>
- <servlet-class>cn.upload.servlet.UploadServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>uploadFile</servlet-name>
- <url-pattern>/uploadFile</url-pattern>
- </servlet-mapping>
- </web-app>
基本上就这样,这个上传文件的demo很简陋,希望可以抛砖引玉。
注:我这是在Eclipse下写的。如果你配置在MyEclipse里面可能会少servlet-api.jar,可以手动导入。
转载于:https://blog.51cto.com/leamonlee/949638