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

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

private void addBook(HttpServletRequest request, HttpServletResponse response){
        book = new Book();
        FileItemFactory factory = new DiskFileItemFactory();
        /**
         *需求是获取书本名称和价格 通过mybatis查询获取书本是否唯一(返回书本对象可能是空值也可能是查询到)
         * 这里希望先把书名和价格抓取出来,通过filItem上面方法可以实现呢? 
         */
         
         
         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

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

4回答
好帮手慕小尤 2022-06-26 15:06:48

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

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

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

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

祝学习愉快!

晓舟 提问者 2022-06-26 10:39:25
能不能来个老师回答一下
  • 提问者 晓舟 #1

    这两个方法都是慕课网教学视频里有的,我现在的需求是不想迭代而是直接获取用户输入的书名和价格值。之前有request.getParameter,这里用post提交的能用吗?

    2022-06-25 14:09:53
  • 狂野男孩_程序猴 回复 提问者 晓舟 #2

    可以能用,这是我找到的,getParameter()方法GET和POST都可以使用

    但如果是POST请求要根据表单提交数据的编码方式来确定能否使用.当编码方式是(application/x- www-form-urlencoded)时才能使用.这种编码方式(application/x-www-form-urlencoded)虽然简单,但对于传输大块的二进制数据显得力不从心.

    对于传输大块的二进制数这类数据,浏览器采用了另一种编码方式("multipart/form-data"),

    还有个参考示例你自己试试,行的话告诉我一下https://blog.csdn.net/weixin_51062428/article/details/122973195 


    2022-06-25 15:22:24
  • 提问者 晓舟 回复 狂野男孩_程序猴 #3

    getParameter()方法 POST不可以使用,试过了特别是在二进制传输模式下

    2022-06-26 10:39:08
晓舟 提问者 2022-06-25 08:44:18

之前按视频里教的循环获取很麻烦,我想先获取用户输入的书本名和价格做一个是否插入重复的判断,先排除出再去用dao添加数据

  • 提问者 晓舟 #1

    如何通过commons Fileupload里的的方法把用户输入的表单书名和价格不通过formData list先抓取出来

    2022-06-25 11:01:53
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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