javaWeb实现简单文件上传

本文实例为大家分享了javaWeb实现简单文件上传的具体代码,供大家参考,具体内容如下

1.先导入两个包:commons-fileupload-1.3.3.jar,commons-io-2.6.jar。

2.前端页面代码

<form action="upLoadfile.do" method="post"         enctype="multipart/form-data">         <input type="text" name="username" /><br>          <input type="file" name="userimg" /><br>          <input type="submit" value="提交" /> </form>

2.Servlet代码

package com.uploadtest.upload; import java.io.File; import java.io.IOException; import java.util.List; import java.util.UUID; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; 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.FileUploadBase; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; /**  * Servlet implementation class upLoadfile  */ @WebServlet("/upLoadfile.do") public class upLoadfile extends HttpServlet {     private static final long serialVersionUID = 1L;     /**      * @see HttpServlet#HttpServlet()      */     public upLoadfile() {         super();         // TODO Auto-generated constructor stub     }     /**      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse      *      response)      */     protected void doGet(HttpServletRequest request, HttpServletResponse response)             throws ServletException, IOException {         // TODO Auto-generated method stub         response.getWriter().append("Served at: ").append(request.getContextPath());     }     /**      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse      *      response)      */     protected void doPost(HttpServletRequest request, HttpServletResponse response)             throws ServletException, IOException {         String saveFileName = ""; //         String oldFileName = ""; // 直接由item.getNam()获取的文件名,有可能获取的是路径,也为了避免重名覆盖,所以要对它进行处理         String newFileName = ""; // 对源文件名进行处理后的名字         // 借助工具解析commons-fileupload smartupload(在项目中导入了jar包)         // 判断传递的是否是文件类型,判断form的enctype的属性值是否是multipart/form-data         boolean isMultipart = ServletFileUpload.isMultipartContent(request);         if (isMultipart) {             // 创建FileItem对象的工厂             DiskFileItemFactory factory = new DiskFileItemFactory();             // 获取Servlet上下文             ServletContext servletContext = null;             servletContext = this.getServletConfig().getServletContext();             // 获取临时文件夹             String str = "javax.servlet.context.tempdir";             File repository = (File) servletContext.getAttribute(str);             factory.setRepository(repository);             // 创建文件上传处理器             ServletFileUpload upload = new ServletFileUpload(factory);             // 解决中文乱码             upload.setHeaderEncoding("utf-8");             // 解析request获取上传的参数             try {                 // 使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项                 List<FileItem> items = upload.parseRequest(request);                 // 解决上传文件名的中文乱码                 upload.setHeaderEncoding("UTF-8");                 // 处理参数                 for (FileItem item : items) {                     // 判断是否为Form的表单域,即判断是否为普通的数据,若不是则为文件。                     if (item.isFormField()) {                         String name = item.getFieldName();                         // 解决普通输入项的数据的中文乱码问题                         String value = item.getString("UTF-8");                         // value = new String(value.getBytes("iso8859-1"),"UTF-8");                         //System.out.println(name + "=" + value);                     } else {                         // 设置上传单个文件的大小的最大值,目前是设置为1024*1024*10字节,也就是10MB                         upload.setFileSizeMax(1024 * 1024 * 10);                         // 写入文件                         // 此处本项目在服务器中的路径,为绝对路径,也可以根据需要存入到其他路径                         String rootPath = servletContext.getRealPath("//");                         // File.separator(相当于添加了一个分隔符),在Windows下的路径分隔符(\)和在Linux下的路径分隔符(/)是不一样的,当直接使用绝对路径时,跨平台会报异常                                                 String savePath = rootPath + File.separator + "upload";                         /*  此处我是将文件保存在服务器上的,这样的话如果重写部署一次服务器,之前上传的文件就会删除                           如果想永久保存上传的文件,可以设置一个其他绝对路径,如:E:\eclipse-workspace\JAVAWeb\JSPUploadTest\WebContent\fileByupload。*/                                                  // String savePath = "E:\\eclipse-workspace\\JAVAWeb\\JSPUploadTest\\fileByupload";                         File fileSaveFolder = new File(savePath);                         // 如果不存在该文件夹则创建                         if (!fileSaveFolder.exists()) {                             fileSaveFolder.mkdir();                         }                         oldFileName = item.getName();                         newFileName = processFileName(oldFileName);                         saveFileName = savePath + File.separator + newFileName;                         // 存储文件                         File uploadedFile = new File(saveFileName);                         item.write(uploadedFile);                     }                 }                 request.setAttribute("message", "文件上传成功!");             } catch (FileUploadBase.FileSizeLimitExceededException e) {                 e.printStackTrace();                 request.setAttribute("message", "照片大小不能超过10M");                 request.getRequestDispatcher("Show.jsp").forward(request, response);                 return;             } catch (FileUploadException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             } catch (Exception e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }             request.setAttribute("saveFileName", saveFileName);             request.setAttribute("newFileName", newFileName);             request.getRequestDispatcher("Show.jsp").forward(request, response);         }     }     // 对文件名进行处理     private String processFileName(String oldFileName) {         // 补充:对于 item.getName()有的浏览器会返回文件名,而有的浏览器会返回“路径”+“文件名”,针对后者我们需要通过“字符串截取”获取文件名         // 例如会出现这样的情况:item.getName():C:\Users\Desktop\备忘录.txt         String tempFileName = "";         int index = oldFileName.lastIndexOf("\\");         if (index != -1) {             // subString(x)是从字符串的第x个字符截取             tempFileName = oldFileName.substring(index + 1);         }         // 为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名         return UUID.randomUUID().toString() + "_" + tempFileName;     } }

3.图片展示

<p>${message}</p>   <img id="picture" src="upload/${newFileName}" width="200px" height="200px" alt="不是图片">

推荐阅读