🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 步骤 1 : 编辑页面提交数据 编辑页面提交数据到admin_category_update ~~~ <form method="post" id="editForm" action="admin_category_update" enctype="multipart/form-data"> ~~~ 1. method="post" 用于提交中文 2. enctype="multipart/form-data" 用于提交二进制文件 ![](https://box.kancloud.cn/e6da79947f7e275c5990e9e35115a7ef_508x256.png) # 步骤 2 : 调用CategoryServlet.update()方法 CategoryServlet.update() 方法和CategoryServlet.add()方法的处理很类似,有所不同之处在于增加操作一定会提交图片,而修改不一定提交图片。 在update()方法中做了如下操作: 1. parseUpload 获取上传文件的输入流 2. parseUpload 方法会修改params 参数,并且把浏览器提交的name信息放在其中 3. 从params 中取出id和name信息,并根据这个id,name信息,创建新的Category对象,并借助categoryDAO,向数据库中更新数据。 4. 根据request.getServletContext().getRealPath( "img/category"),定位到存放分类图片的目录 5. 文件命名以保存到数据库的分类对象的id+".jpg"的格式命名 6. 如果通过parseUpload 获取到的输入流是空的,或者其中的可取字节数为0,那么就不进行上传处理 ``` if(null!=is && 0!=is.available()) ``` 7. 根据步骤1获取的输入流,把浏览器提交的文件,复制到目标文件 8. 借助ImageUtil.change2jpg()方法把格式真正转化为jpg,而不仅仅是后缀名为.jpg 9. 最后客户端跳转到admin_category_list ``` public String update(HttpServletRequest request, HttpServletResponse response) { Map<String, String> params = new HashMap<>(); InputStream is = super.parseUpload(request, params); System.out.println(params); String name = params.get("name"); int id = Integer.parseInt(params.get("id")); Category c = new Category(); c.setId(id); c.setName(name); categoryDao.update(c); File imageFolder = new File(request.getSession().getServletContext().getRealPath("img/category")); File file = new File(imageFolder, c.getId() + ".jpg"); file.getParentFile().mkdirs(); try { if (null != is && 0 != is.available()) { try (FileOutputStream fos = new FileOutputStream(file)) { byte b[] = new byte[1024 * 1024]; int length = 0; while (-1 != (length = is.read(b))) { fos.write(b, 0, length); } fos.flush(); BufferedImage img = ImageUtil.change2jpg(file); ImageIO.write(img, "jpg", file); } catch (Exception e) { e.printStackTrace(); } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return "@admin_category_list"; } ```