1.具体实现

  (1)、下载common-fileupload和common-io(百度搜索或去官网下载)

  用servlet实现文件的上传,这里用到Apache的开源工具:common-fileupload。因为common-fileupload依赖于common-io,所以需要同时下载两个包。 

  (2)、将common-fileupload和common-io添加到工程下存放jar的库中

  (3)、前端页面设计

1 <div class="panel border-back text-center" style="height: 340px">
 2                         <br/>
 3                         <br>
 4                         <img alt="请上传个人图片" src="images/${fileName}" width="120" class="radius-circle" />
 5                         <br>
 6                         <br>
 7                         <input type="text" name="fileName" value="${fileName}">
 8                         <br>
 9                         <br>
10                         <form action="FileUploadServlet" method="post" enctype="multipart/form-data">
11                             <input type="file" name="file">
12                             <br>
13                             <input type="submit" value="上传">
14                         </form>
15                     </div>

   (4)、后端实现

  

DiskFileItemFactory dfi = new DiskFileItemFactory();
        //获得上传文件的存储路径
        String path;
        path = request.getServletContext().getRealPath("/images");
        //设置文件大小超过1024*1024就写到disk上
        dfi.setSizeThreshold(1024 * 1024);
        //设置存储的仓库
        dfi.setRepository(new File(path));
        //实例化一个servletFileUpload对象
        ServletFileUpload sfu = new ServletFileUpload(dfi);
        //解决上传文件乱码问题
        sfu.setHeaderEncoding("GBK");
        try {
            List<FileItem> list = sfu.parseRequest(request);
            //取得session
            HttpSession session = request.getSession();
            //遍历得到每个FileItem
            for (FileItem item : list) {
                //取得表单文本框的名字
                String name = item.getFieldName();
                //如果上传的是一个文件
                //取得上传文件的名字,即上传框中的内容名字
                String value = item.getName();
                //因为在opera浏览器中文件上传item.geName()会得到具体路径而不止是名字,所以需要从路径中取出名字
                //取得文件路径名字开始的位置
                int start = value.lastIndexOf("\\");
                //得到文件名
                String fileName = value.substring(start + 1);
                //读取文件的内容
                item.write(new File(path, fileName));
                //存储数据
                session.setAttribute(name, fileName);
                session.setAttribute("fileName", fileName);

  

2.注意

  (1)、servlet中不能用request.getParameter("字段名")来获取表单的字段内容,因为表单的enctype="multipart/form-data",这里传输的是二进制,所以不能用`getParameter(“字段名”)获得。
获得字段名:

String name = item.getFieldName();
  String value = item.getName();

  (2)、注意你上传文件保存的路径和你img里src访问的路径要一致。

  (3)、注意你导包是否正确,导commons的包不要导tomcat的包,具体的你导包的时候就会发现有两个选项。