如何使用Apache commons upload获取表单单独传回的数据?(需求在注释)

如何使用Apache commons upload获取表单单独传回的数据?(需求在注释)

private void addBook(HttpServletRequest request, HttpServletResponse response){
        book = new Book();
        FileItemFactory factory = new DiskFileItemFactory();
        /**
         *需求是获取表单传回的书本名称和价格 通过mybatis查询获取书本是否唯一(返回书本对象可能是空值也可能是查询到)
         * 这里希望先把书名和价格抓取出来,而不是先通过list循环迭代出来,可以使用哪一种方法直接获取吗?
         */
          
          
         ServletFileUpload sf = new ServletFileUpload(factory);
            try {
            List<FileItem> formData = sf.parseRequest(request);
            for(FileItem fileItem:formData){
                if(fileItem.isFormField()){
                    System.out.println("common files"+ fileItem.getFieldName()+":"+ fileItem.getString("UTF-8"));
                    switch (fileItem.getFieldName()){
                        case "name":
                            book.setName(fileItem.getString("UTF-8"));
                            break;
                        case "categoryId":
                            book.setCategoryId(Long.valueOf(fileItem.getString("UTF-8")));
                            break;
                        case "level":
                            book.setLevel(Integer.valueOf(fileItem.getString("UTF-8")));
                            break;
                        case "price":
                            book.setPrice(Integer.valueOf(fileItem.getString("UTF-8")));
                            break;
                    }
                }else{
                    System.out.println("files options :"+fileItem.getFieldName());
                    String imgPath = request.getServletContext().getRealPath("/img");
                    System.out.println(imgPath);
                    String fileName = UUID.randomUUID().toString();
                    String suffix = fileItem.getName().substring(fileItem.getName().lastIndexOf("."));
                    System.out.println(imgPath);
                    System.out.println(fileName);
                    fileItem.write(new File(imgPath,fileName+suffix));
                    book.setImgPath("/img/"+fileName+suffix);
                }
            }
            bookService.insert(book);
            response.sendRedirect("/admin/book/list");
        } catch (FileUploadException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
        } catch (Exception e) {
                e.printStackTrace();
        }


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小尤 2022-06-26 15:07:27

同学你好,暂时没有找到好的方法,下方有两个思路同学可以参考一下:

1、在现阶段同学也可以使用课程中的方式。先不要去获取图书与价格,在新增前时通过图书与价格参数进行判断。

2、在后期项目中会将图片单独进行上传(可以通过ajax),然后将图片的路径返回给前台。可以在前台书写一个隐藏域,从而进行传递数据进行新增修改。

    通过get的方式进行传递,然后获取图书与价格进行判断。关于图片信息回去隐藏域中的地址即可。

祝学习愉快!

  • 提问者 晓舟 #1

    新增时判断是否重复?具体要用到哪些方法和操作呢

    2022-06-26 16:36:40
  • 提问者 晓舟 #2

    1、新增时判断是否重复?具体要用到哪些方法和操作呢?


    2022-06-26 16:58:15
  • 好帮手慕小尤 回复 提问者 晓舟 #3

    同学你好,将查询数据是否唯一的代码移动到添加数据前。具体需要使用那些方法同学可以根据自己项目的代码进行调用。如下所示:

    https://img1.sycdn.imooc.com//climg/62b824e609d0a79a08050425.jpg

    祝学习愉快!

    2022-06-26 17:21:09
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师