第一步:

1导入第三方包(commons-io-2.1.jar)(commons-fileupload-1.2.2.jar)

servlet实现文件上传功能_java

第二步:写好页面然后修改<form>表单enctype="multipart/form-data"属性(包含文件的表单都必须用这个属性 )

servlet实现文件上传功能_java_02

<%@ page language="java"import="java.util.*"pageEncoding="UTF-8"%>

<%

Stringpath = request.getContextPath();

StringbasePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">

<html>

  <head>

    <title>文件上传</title>

   

    <metaname="keywords"content="keyword1,keyword2,keyword3">

    <meta name="description"content="this is my page">

    <meta name="content-type"content="text/html; charset=UTF-8">

   

    <!--<linkrel="stylesheet"type="text/css"href="./styles.css">-->

 

  </head>

 

  <body>

    <formaction="UploadServlet"method="post"enctype="multipart/form-data">

        <table width="600px">

           <tr>

               <td>上传者</td>

               <td><inputtype="text"name="name"></td>

           </tr>

           <tr>

               <td>上传文件</td>

               <td><inputtype="file"name="myfile"></td>

           </tr>

           <tr>

               <td colspan="2"> <inputtype="submit"value="上传"/></td>

           </tr>

        </table>

    </form>

  </body>

</html>

servlet实现文件上传功能_java_03



第三步:写servlet(UploadServlet.java)

packagecom.example.servlet;

importjava.io.File;

importjava.io.FileOutputStream;

importjava.io.IOException;

importjava.io.InputStream;

importjava.io.OutputStream;

importjava.io.PrintWriter;

importjava.util.List;

importjava.util.UUID;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importorg.apache.commons.fileupload.FileItem;

importorg.apache.commons.fileupload.FileUploadException;

importorg.apache.commons.fileupload.disk.DiskFileItemFactory;

importorg.apache.commons.fileupload.servlet.ServletFileUpload;

publicclass UploadServlet extendsHttpServlet {

    @Override

    protectedvoiddoGet(HttpServletRequest req, HttpServletResponse resp)

           throws ServletException, IOException {

       resp.setContentType("text/html;charset=utf-8");

       try {

           // 创建工厂

           DiskFileItemFactory factory = newDiskFileItemFactory();

           File f = new File("/File");

           if (!f.exists()) {

              f.mkdir();

           }

           // 设置文件的缓存路径

           factory.setRepository(f);

           // 创建fileupload组件

           ServletFileUpload fileUpload =new ServletFileUpload(factory);

           fileUpload.setHeaderEncoding("gbk");

           // 解析request

           List<FileItem> fileItems =fileUpload.parseRequest(req);

           PrintWriter write=resp.getWriter();

           //遍历集合

           for (FileItem fileItem : fileItems) {

              if (fileItem.isFormField()) {//判断是否为普通字段

                  //获取字段名和字段值

                  Stringname=fileItem.getFieldName();

                  Stringvalue=fileItem.getString("gbk");

                  write.println("上传者:"+value);

              }else{

                  //上传文件路径

                  Stringfilename=fileItem.getName();

                  write.println("文件来源:"+filename);

                  //截取文件名

                  filename =filename.substring(filename.lastIndexOf("\\")+1);

                  write.println("成功上传的文件:"+filename);

                  //文件名唯一

                  filename = UUID.randomUUID().toString()+"_"+filename;

                  //在服务器创建同名文件

                  String webPath="/File/";

                  Stringfilepath=getServletContext().getRealPath(webPath+filename);

                  //创建文件

                  File file = newFile(filepath);

                  file.getParentFile().mkdirs();

                  file.createNewFile();

                  //获得上传文件流

                  InputStreamin=fileItem.getInputStream();

                  //获得写入文件流

                  OutputStream out=newFileOutputStream(file);

                  //

                  byte[] buffer =newbyte[1024];

                  int len ;

                  while((len = in.read(buffer))>0){

                     out.write(buffer,0,len);

                    

                  }

                  //关闭流

                  in.close();

                  out.close();

                  //删除临时文件

                  fileItem.delete();

              }

             

           }

       } catch (FileUploadException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

 

    }

 

    @Override

    protectedvoiddoPost(HttpServletRequest req, HttpServletResponse resp)

           throws ServletException, IOException {

       doGet(req, resp);

    }

 

}

 


第四步:配置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">

  <display-name></display-name>

  <servlet>

    <servlet-name>UploadServlet</servlet-name>

    <servlet-class>com.example.servlet.UploadServlet</servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>UploadServlet</servlet-name>

    <url-pattern>/UploadServlet</url-pattern>

  </servlet-mapping>

  <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>

</web-app>


第五步:Tomcat部署项目!运行上传文件!

servlet实现文件上传功能_java_04

第六步:上传成功!

servlet实现文件上传功能_java_05

第七步查看已经上传成功的文件:

servlet实现文件上传功能_java_06

servlet实现文件上传功能_java_07

servlet实现文件上传功能_java_08