今天學習了用servlt創建一個上傳文件的頁面,本來以為很簡單的事情,想着一下就搞定了,沒想到卻困擾了很長時間,代碼檢查了一遍又一遍,卻忽略了服務器的報錯,最后終於解決了問題,原來是都上傳文件路徑里面的文件夾要自己創建,不然系統找不到指定的路徑,所以要吸取教訓,要記得自己創建文件夾,系統是不會幫你創建的。具體代碼如下:
1 import org.apache.commons.fileupload.FileItem; 2 import org.apache.commons.fileupload.FileItemFactory; 3 import org.apache.commons.fileupload.disk.DiskFileItemFactory; 4 import org.apache.commons.fileupload.servlet.ServletFileUpload; 5 6 import javax.servlet.annotation.WebServlet; 7 import java.io.File; 8 import java.io.IOException; 9 import java.io.PrintWriter; 10 import java.util.Iterator; 11 @WebServlet(name="FileUpload",urlPatterns = "/FileUpload") 12 public class FileUpload extends javax.servlet.http.HttpServlet { 13 protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException { 14 //判斷文件是否上傳 15 16 boolean isMultispart = ServletFileUpload.isMultipartContent(request); 17 18 //創建文件上傳對象 19 if (isMultispart) { 20 21 FileItemFactory factory = new DiskFileItemFactory(); 22 ServletFileUpload upload = new ServletFileUpload(factory); 23 //存放解析表單的元素 24 Iterator items; 25 try { 26 //解析表單提交的內容 27 items = upload.parseRequest(request).iterator(); 28 while (items.hasNext()) { 29 30 FileItem Item = (FileItem) items.next(); 31 //判斷他是否屬普通字段 32 if (!Item.isFormField()) { 33 34 //取出上傳文件的名字 35 String name = Item.getName(); 36 String filename = name.substring(name.lastIndexOf('\\') + 1, name.length()); 37 //上傳文件保存到服務器的路徑 38 String path = request.getSession().getServletContext().getRealPath("upload") + File.separatorChar + filename; 39 //上傳文件 40 41 File uploadfile = new File(path); 42 Item.write(uploadfile); 43 response.setContentType("text/html;charset=utf-8"); 44 PrintWriter out=response.getWriter(); 45 out.print("上傳的文件為:" + name + "<br>"); 46 out.print("上傳的文件地址為:" + path); 47 48 49 } 50 51 } 52 53 } catch (Exception e) { 54 e.printStackTrace(); 55 } 56 } 57 58 } 59 60 }
報出的錯誤如下:
所以給自己一個提醒用File上傳文件的時候,要自己創建上傳文件目錄的文件夾。
(用的是Apache的插件進行上傳文件:commons-fileupload-1.3.3.jar和commons-io-2.6.jar)