今天学习了用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)