当前位置: 首页 > 面试题库 >

java.lang.NullPointerException:未设置FileItemFactory

秦城
2023-03-14
问题内容

尝试使用流API实施fileUpload时,出现以下错误:当我从流API网页上收集到“传统FileItemFactory被完全忽略”时,我想知道自己在做错什么。因此,我定义了一种基本方法,如下所示:

/**
 * 
 * @param
 * @return
 */
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {

    // Check that we have a file upload request
    boolean isMultipart = ServletFileUpload.isMultipartContent(request);

    if (isMultipart) {

        ServletFileUpload upload = new ServletFileUpload();                 // Create a new file upload handler

            // Parse the request
            try {
Line 39 -->         List items = upload.parseRequest(request);                      // FileItem
            Iterator iter = items.iterator();
            while (iter.hasNext()) {
                FileItemStream item = (FileItemStream) iter.next();

                if (!item.isFormField()) {
                    this.processFITSFile(item);
                }
            }
        } catch (FileUploadException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }       
    }
}

但这导致以下错误:

SEVERE: Servlet.service() for servlet FitsFileProcessorServlet threw exception
java.lang.NullPointerException: No FileItemFactory has been set.
    at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:353)
    at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
    at controller.FITSFileProcessor.doPost(FITSFileProcessor.java:39)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    at java.lang.Thread.run(Unknown Source)

问题答案:

new ServletFileUpload()创建一个未初始化的实例。它的文档说:

构造此类的未初始化实例。在尝试解析请求之前,必须使用setFileItemFactory()配置工厂。

因此,您需要使用setFileItemFactory()或使用其他构造函数,该构造函数将工厂作为参数。像这样:

// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();

// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);

有关更多信息,请参见文档。这个例子也是从那里开始的。

或者,您可以使用流API,但随后需要以不同的方式获取迭代器:

ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iter = upload.getItemIterator(request);
while (iter.hasNext()) {
    FileItemStream item = iter.next();
    ...
}


 类似资料:
  • 我将设置为,并将其添加到我的。当我运行和echo,它们都给了我正确的信息。但是,当我运行libgdx安装程序时,它会给出以下错误:<code>错误:未设置JAVA_HOME,并且在路径中找不到任何“JAVA”命令。 请在您的环境中设置JAVA_HOME变量,以匹配您的JAVA安装位置。 有什么想法吗?

  • 当我运行我的应用程序时,我有“应用程序启动方法[警告]java.lang.reflect.InvocationTargetException异常”。我尝试使用fxml路径但仍然不起作用。当使用try/catch时,我有“位置未设置错误”。 我还得到了“未能在项目Test-generator-Maven上执行目标org.codehaus.mojo:exec-maven-plugin:1.2.1:ja

  • 我尝试过交替cors设置,但没有成功。客户端调用使用axios,并设置了。

  • 我在尝试运行我的代码时遇到了这个错误,这是一个简单的javafx代码来加载一个fxml文件,我尝试了我在这里找到的解决方案,但没有一个对我有效。很抱歉,如果格式不是很好,这是我在这里的第一个帖子,并且很抱歉,如果我在屠杀语言,英语不是我的第一语言。提前道谢! 这是事情的组织方式

  • 我的笔记本电脑上安装了Java14和Java8,但默认情况下我想使用8,所以我尝试将我的java_HOME设置为使用-V1.8。 在~/。bash_profile我添加了一行。执行此操作后,立即返回正确的路径,返回正确的版本。然而,如果我关闭终端并再次打开它,将产生一个空行,显示JAVA 14。编辑之后。bash_profile我做的当我重新打开终端并执行行设置JAVA_HOME仍然存在。为什么我

  • 我有这个型号 而我有这个方法 但是hibernate没有设置实际地址id和注册地址id(它是OneTONE) Hibernate:插入客户(名字、姓氏、中间名、性别)值(?、、?、?)2021-03-18 14:01:58.340警告12836---[nio-8080-exec-1]o.h.发动机。jdbc。spi。SqlExceptionHelper:SQL错误:0,SQLState:23502