【问题标题】:Check if Spring Multipart File uploaded has a form field检查上传的 Spring Multipart File 是否有表单字段
【发布时间】:2020-10-21 11:23:54
【问题描述】:

我们使用 apache 文件上传来上传文件,下面的代码也用于相同的操作。

 ServletFileUpload upload = new ServletFileUpload(itemFactory);

        List<FileItem> items = upload.parseRequest(request);

        Iterator<FileItem> iterator = items.iterator();

        while (iterator.hasNext()) {
            FileItem item = iterator.next();

            if (item.isFormField()) {
                String name = item.getFieldName();
                String value = item.getString();
                conf.put(name, value);
            } else {
                InputStream is = item.getInputStream();
                byte[] bytes = ByteStreams.toByteArray(is);
                String query = new String(bytes, "UTF-8");
                conf.put("test", query);
            }
        }

但我们最近转移到 Spring boot 并尝试使用 spring multipart 上传文件。将替换上述代码的代码将是

        DefaultMultipartHttpServletRequest requestMain = (DefaultMultipartHttpServletRequest) request;
        Iterator<String> fileNameIterator = requestMain.getFileNames();
        ListIterator<MultipartFile> iterator = null;
        while (fileNameIterator.hasNext()) {
            multipartFiles = requestMain.getFiles(fileNameIterator.next());
            iterator = multipartFiles.listIterator();
            while (iterator.hasNext()) {
                MultipartFile item = iterator.next();
                if (item.isEmpty()) {
                    // String name = item.getFieldName();
                    // String value = item.getString();
                    // conf.put(name, value);
                } else {
                    InputStream is = item.getInputStream();
                    byte[] bytes = ByteStreams.toByteArray(is);
                    String query = new String(bytes, "UTF-8");
                    conf.put("query", query);
                }
            }

        }

但我无法弄清楚如何在 spring boot 中检查文件是否有表单字段。在 apache 文件上传中,它是使用 item.isFormField() 方法实现的。

【问题讨论】:

    标签: spring spring-boot file-upload multipartform-data


    【解决方案1】:

    您不需要检查项目是否为表单字段。 requestMain.getFiles(fileNameIterator.next()); 方法将返回 MultipartFile,因此您知道它不是表单字段。

    要获取表单字段,请使用

    requestMain.getParameterMap()
    

    或者,用于特定领域

    requestMain.getParameter("field")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 2017-03-28
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      • 2018-06-01
      相关资源
      最近更新 更多