在很多的场景下,我们都需要上传图片,比如在朋友圈上传自己喜欢的照片,为自己的账号设置一个精美的头像,为自己商店上传货物照片。这些都需要我们将图片进行上传并将图片保存在服务器上将图片的地址存放在mysql数据库中。
servlet文件中获取上传的资料
protected void addCarInfo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Cars c=new Cars();try {//文件保存路径String filePath = getServletContext().getRealPath("/"); System.out.println(filePath+"==============1");DiskFileItemFactory factory = new DiskFileItemFactory();factory.setSizeThreshold(4096);ServletFileUpload upload = new ServletFileUpload(factory);List items = upload.parseRequest(request);Iterator<?> iter = items.iterator();while(iter.hasNext()){FileItem item = (FileItem)iter.next();if(item.isFormField()){ //普通表单域//程序逐个判断input文件的作用是普通的表单还是上传文件的表单//获取input的name值String name = item.getFieldName();//获取inpout输入的值String value = item.getString();System.out.println(name+"==="+value);if(name.equals("gname")){System.out.println(value+"====");c.setGname(value);}}else{//上传文件域//文件名称String fileName = item.getName(); //获取file表单的NamefileName = fileName.substring(fileName.lastIndexOf("\\") + 1,fileName.length());System.out.println(fileName+"===============3");String path = filePath + "images\\" + fileName;//将地址进行拼接,这个地址是将文件存放的地址System.out.println("文件上传到:" + path);String p="images/" + fileName;//将地址 拼接好存放在数据库中,方便拿取数据c.setPic(p);File file = new File(path);item.write(file);}}} catch (FileUploadException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}Integer a=cs.addCarsInfo(c);if(a!=null){System.out.println("成功了!");response.sendRedirect("asset.html");}else{response.sendRedirect("addCarsInfo.html");}}
前端页面代码
<form action="carServlet?type=1" method="post" enctype="multipart/form-data"><!-- enctype="multipart/form-data"在上传图片是需要在form表单里面加入的属性值 -->
汽车名:<input type="text" value="" name="gname" placeholder="请输入汽车名!"><br/>
上传图片:<input type="file" name="pic"><br/>
<input type="submit" value="添加">
</form>