在客户需要求中,文件上传的功能几乎是必须,本篇博主讲讲如何实现文件的上传,上传后文件会被保存到哪里等相关具体实现。
项目结构如下:需要导入两个jar包,是apache提供的文件上传工具类
jar包下载地址:【http://pan.baidu.com/s/1slbIstn】
bootstrap下载地址:【http://pan.baidu.com/s/1boG6nLX】
创建index.jsp:
用form表单提交文件,form表单必须设置enctype="multipart/form-data"、method="post"
action="",指定一个servlet处理表单。
style样式是一个椭圆的边框。
<%@ 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 lang="zh-CN"> <head> <title>文件上传</title> <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet"> <script src="bootstrap/js/jquery.min.js"></script> <style> .circular{ margin:20px; padding:10px; width:300px; height:auto; border: 2px solid #000000; -moz-border-radius: 15px; -webkit-border-radius: 15px; border-radius:15px; } </style> </head> <body> <div class="circular"> <form enctype="multipart/form-data" action="uploadServlet" method="post"> <div class="form-group"> <label>File input</label> <input type="file" id="filename" name="filename"/> </div> <button type="submit" class="btn btn-default btn-primary">按钮</button> </form> </div> </body> </html>UploadServlet.java: import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.UUID; 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.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.FilenameUtils; /** * Servlet implementation class uploadServlet */ @WebServlet("/uploadServlet") public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public UploadServlet() { super(); // TODO Auto-generated constructor stub } /** * 功能:使用apache提供的上传组件实现文件上传 * */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("***处理上传请求***"); DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setRepository(new File("e:/"));//临时文件存储路径 ServletFileUpload fileUpload = new ServletFileUpload(factory);//核心操作对象 fileUpload.setHeaderEncoding("utf-8");//防乱码 try { List<FileItem> list = fileUpload.parseRequest(request);//解析器解析request请求 for (FileItem fileItem : list) {//多文件上传处理 InputStream in = fileItem.getInputStream(); String filename = fileItem.getName();//得到的是全路径文件名,需要处理 if (filename!=null) { filename =UUID.randomUUID()+"_"+FilenameUtils.getName(filename);//filename = 时间戳_文件名.类型,解决文件重名被覆盖问题 System.out.println(filename); int len = 0; byte[] array = new byte[1024]; FileOutputStream fos = new FileOutputStream("f:/"+filename); while((len = in.read(array))!=-1){//表示每次最多读1024个字节 fos.write(array,0,len); fos.flush(); } fos.close(); in.close(); fileItem.delete(); response.setCharacterEncoding("UTF-8"); response.getWriter().append("上传成功"); } } } catch (Exception e) { e.printStackTrace(); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
可以看到F盘下已经有了上传的文件。