最近忙着考試,沒什麼時間更新博客,下面說一下如何在servlet上實現文件的上傳.
首先上傳文件的表單的方法method="Post",編碼方式enctype="multipart/form-data"(這個很重要),action="servlet的url"
如: html
<form action="FileUploadServlet" method="post" enctype="multipart/form-data"> <input type="file" name="upload" /> <input type="submit"/> </form>
咱們使用 Apache提供的commons-fileupload jar包實現文件上傳 java
要導入的包:
FileUpload 1.3.jar http://commons.apache.org/proper/commons-fileupload/
commons-io-2.4.jar http://commons.apache.org/proper/commons-io/download_io.cgi
存放到lib目錄下
FileUploadServlet的代碼: apache
boolean isMultipart = ServletFileUpload.isMultipartContent(req); if (!isMultipart) { //檢查請求是否爲multipart表單數據 return; } //請求正文的每一個子部分都被看做一個FileItem對象 // 建立一個基於硬盤的FileItem工廠 DiskFileItemFactory factory = new DiskFileItemFactory(); // 設置緩衝區大小 factory.setSizeThreshold(1024); //設置臨時目錄 factory.setRepository(new File(tempPath)); //建立文件上傳處理器 ServletFileUpload upload = new ServletFileUpload(factory); //設置文件的最大尺寸 以字節爲單位 upload.setFileSizeMax(1024 * 1024 * 2); //解析請求正文 List<FileItem> fileitems =upload.parseRequest(req); // 遍歷全部的FileItem對象 for (int i = 0; i < fileitems.size(); i++) { FileItem item = fileitems.get(i); // 整個表單的全部域都會被解析,要先判斷一下是普通表單域仍是文件上傳域 if (item.isFormField()) { String name = item.getFieldName(); String value = item.getString(); System.out.println(name + ":" + value); } else { String fieldName = item.getFieldName(); String fileName = item.getName(); String contentType = item.getContentType(); boolean isInMem = item.isInMemory(); long sizeInBytes = item.getSize(); System.out.println(req.getRemoteAddr() + "上傳文件" + fileName); System.out.println(fieldName + ":" + fileName); System.out.println("類型:" + contentType); System.out.println("文件大小" + sizeInBytes); File uploadedFile = new File(filePath+ fileName); item.write(uploadedFile); } } post