在Java中使用 Servlet 來接收用戶上傳的文件,須要用到兩個apache包,分別是 commons-fileupload 和 commons-io 包;html
若是直接在doPost中,使用request.getInputStream()獲取ServletInputStream,這樣獲取到的Stream是不能直接寫入文件的,好比上傳一個txt文件,你會發現保存下來的txt文件不僅有本來txt文件自己的內容,裏面還有post請求的一些參數,好比參數分割符等;apache
下面就是一個使用fileupload包來接收文件內容的例子:ide
public class FileServlet extends HttpServlet { /** * */ private static final long serialVersionUID = -4187075130535308117L; private boolean isMultipart; private int maxFileSize = 1024 * 1024 * 10; private int maxMemSize = 100 * 1024; @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 檢查是否有一個文件上傳請求 isMultipart = ServletFileUpload.isMultipartContent(request); String result = ""; response.setContentType("text/html;charset=utf-8"); if (!isMultipart) { result = "未獲取到文件"; response.getWriter().println(result); return; } DiskFileItemFactory factory = new DiskFileItemFactory(); // 文件大小的最大值將被存儲在內存中 factory.setSizeThreshold(maxMemSize); // Location to save data that is larger than maxMemSize. String path = getServletContext().getRealPath("/") + "/"; factory.setRepository(new File(path)); // System.out.println(path); // 建立一個新的文件上傳處理程序 ServletFileUpload upload = new ServletFileUpload(factory); // 容許上傳的文件大小的最大值 upload.setSizeMax(maxFileSize); try { // 解析請求,獲取文件項 List fileItems = upload.parseRequest(request); // 處理上傳的文件項 Iterator i = fileItems.iterator(); while (i.hasNext()) { FileItem fi = (FileItem) i.next(); if (!fi.isFormField()) { // 獲取上傳文件的參數 String fieldName = fi.getFieldName(); String fileName = fi.getName(); String contentType = fi.getContentType(); boolean isInMemory = fi.isInMemory(); long sizeInBytes = fi.getSize(); // 寫入文件 File file = new File(path + System.currentTimeMillis() / 1000 + ".py"); fi.write(file); } } result = "上傳成功"; } catch (Exception ex) { System.out.println("ex:" + ex.getMessage()); result = "上傳失敗"; } response.getWriter().println(result); } }
接下來,在html頁面中,能夠經過在一個表單中來提交上傳文件post
<form action="fileUpload" enctype="multipart/form-data" method="post"> <input type="file" name="file"></input> <input type="submit" value="提交"></input> </form>