简体   繁体   English

FileUpload(Apache Commons)和Java POI IOException:无法读取整个标头

[英]FileUpload (Apache Commons) and Java POI IOException: Unable to read entire header

I'm trying to user Apache Commons Streaming API to get the information from an excel spreadsheet. 我正在尝试使用Apache Commons Streaming API从Excel电子表格中获取信息。 I keep on getting the following error: 我不断收到以下错误:

    SEVERE: org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is null
    at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:908)
    at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331)
    at org.apache.commons.fileupload.servlet.ServletFileUpload.getItemIterator(ServletFileUpload.java:148)
    at eBooks.controller.ReportServlet.processRequest(ReportServlet.java:54)
    at eBooks.controller.ReportServlet.doPost(ReportServlet.java:178)
    at eBooks.controller.ReportServlet.doGet(ReportServlet.java:170)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1542)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    at java.lang.Thread.run(Thread.java:722)

INFO: Reports
INFO: Form field upload_report_btnwith valueUpload Report detected
SEVERE: org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is null
    at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:908)
    at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331)
    at org.apache.commons.fileupload.servlet.ServletFileUpload.getItemIterator(ServletFileUpload.java:148)
    at eBooks.controller.ReportServlet.processRequest(ReportServlet.java:54)
    at eBooks.controller.ReportServlet.doPost(ReportServlet.java:178)
    at eBooks.controller.ReportServlet.doGet(ReportServlet.java:170)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1542)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    at java.lang.Thread.run(Thread.java:722)

SEVERE: org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is null
    at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:908)
    at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331)
    at org.apache.commons.fileupload.servlet.ServletFileUpload.getItemIterator(ServletFileUpload.java:148)
    at eBooks.controller.ReportServlet.processRequest(ReportServlet.java:54)
    at eBooks.controller.ReportServlet.doPost(ReportServlet.java:178)
    at eBooks.controller.ReportServlet.doGet(ReportServlet.java:170)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1542)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    at java.lang.Thread.run(Thread.java:722)

This is the code of ReportServlet that process the information: 这是处理信息的ReportServlet的代码:

package eBooks.controller;

/**
 * @author L10
 */

import eBooks.business.Account;
import eBooks.business.Report;
import eBooks.business.User;

import java.io.*;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileUploadException;

import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.util.Streams;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;



public class ReportServlet extends HttpServlet
{

        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {


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

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


            //Parse the request
            FileItemIterator iter = upload.getItemIterator(request);                    

            while(iter.hasNext())
            {
                FileItemStream item = iter.next();
                String name = item.getFieldName();
                InputStream stream = item.openStream();

                        if(item.isFormField())
                        {
                            System.out.println("Form field " + name + "with value" + Streams.asString(stream) + " detected" );                            
                        }
                        else
                        {

                            POIFSFileSystem fs = new POIFSFileSystem(stream);               
                            HSSFWorkbook wb = new HSSFWorkbook(fs);
                            HSSFSheet sheet = wb.getSheetAt(0);
                            System.out.println(wb.getSheetName(0));

                            //  session
                            HttpSession session = request.getSession();

                            //Define define values obatained from the document

                            Report report = new Report();
                            User user = new User();
                            Account account = new Account();                    

                            int reportType = report.getReportType();

                            String emailAddress = user.getEmailAddress();
                            String account_id = account.getAccount_id();
                            String accountName = account.getAccountName();
                            String userRole = user.getUserRole();

                            String reportName = report.getReportName(); // is the spreadsheet Name
                            String reportDate = report.getReportDate(); // is the period on the report

                            double totalUS = report.getMonthTotalUS();
                            double totalEUR = report.getMonthTotalEUR();
                            double grandTotal = report.getMonthGrandTotal();

                            double averagePrice = report.getAverageSalePrice();

                            int totalUnitsSold = report.getTotalUnitsSold();
                            double monthlyAverageUnitsSold = report.getMonthlyAverageUnitsSold();
                            double dailyAverageUnitsSold = report.getDailyAverageUnitsSold();

                            int totalUnitsRefunded = report.getTotalUnitsRefunded();
                            double monthlyAverageUnitsRefunded = report.getMonthlyAverageUnitsRefunded();
                            double dailyAverageUnitsRefuded = report.getDailyAverageUnitsRefuded();

                            double monthlyAverageRoyalties = report.getMonthlyAverageRoyalties();

                            // set values for the user, account & report objects

                            report.setReportType(reportType);

                            user.setEmailAddress(emailAddress);
                            account.setAccount_id(account_id);
                            account.setAccountName(accountName);
                            user.setUserRole(userRole);

                            report.setReportName(reportName); // is the spreadsheet Name
                            report.setReportDate(reportDate); // is the period on the report

                            report.setMonthTotalUS(totalUS);
                            report.setMonthTotalEUR(totalEUR);
                            report.setMonthGrandTotal(grandTotal);

                            report.setAverageSalePrice(averagePrice);

                            report.setTotalUnitsSold(totalUnitsSold);
                            report.setMonthlyAverageUnitsSold(monthlyAverageUnitsSold);
                            report.setDailyAverageUnitsSold(dailyAverageUnitsSold);

                            report.setTotalUnitsRefunded(totalUnitsRefunded);
                            report.setMonthlyAverageUnitsRefunded(monthlyAverageUnitsRefunded);
                            report.setDailyAverageUnitsRefuded(dailyAverageUnitsRefuded);

                            report.setMonthlyAverageRoyalties(monthlyAverageRoyalties);


                        // TODO: Add information to the database

                            // set Session for the user, account & report
                            session.setAttribute("User", user);
                            session.setAttribute("Account", account);
                            session.setAttribute("Report", report);                  

                            Cookie emailCookie = new Cookie("emailCookie", emailAddress);
                            emailCookie.setMaxAge(60*60*24*365*2);
                            emailCookie.setPath("/");
                            response.addCookie(emailCookie);

                            String url = "/WEB-INF/view/Dashboard.jsp";
                            RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url);
                            dispatcher.forward(request, response);


                        }
            }

        }catch (FileUploadException ex) {
            Logger.getLogger(ReportServlet.class.getName()).log(Level.SEVERE, null, ex);
        }


    }


    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        doPost(request, response);

    }


    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }


}

This how my form looks: 这是我的表格的样子:

<form action="ReportServlet" method="post" enctype="multipart/form-data">
                    <input type="file" name="file"/> 
                    <br />
                    <input type="submit" value="Upload Report" name="upload_report_btn" />
                </form>

I'm using glassfish. 我在用玻璃鱼。 Any ideas why I keep on getting this message? 有什么想法让我继续收到此消息吗?

In your loop you seem to be assuming that the first and only multipart object arriving will be the spreadsheet file. 在循环中,您似乎假设第一个也是唯一的多部分对象将是电子表格文件。 The form itself will be present as well. 表单本身也将存在。 The clue is the message 线索就是信息

Unable to read entire header; 13 bytes read; expected 512 bytes

Notice, the form's uploaded value is Upload Report , which happens to be 13 bytes long. 请注意,表单的上载值是Upload Report ,恰好是13个字节长。

You could have easily seen this if you used a browser-based debugging tool such as Firebug or Fiddler. 如果您使用了基于浏览器的调试工具(例如Firebug或Fiddler),您可能会很容易看到这一点。 One of these tools should be in your tool-set. 这些工具之一应该在您的工具集中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Java POI-错误:无法读取整个标头 - Java POI - Error: Unable to read entire header 通过Apache POI和Java Web应用程序读取Excel,但显示错误为“ java.io.IOException:org / apache / commons / compress / archivers / zip / ZipFile” - Reading Excel by Apache POI and Java web application but showing error as “java.io.IOException: org/apache/commons/compress/archivers/zip/ZipFile” 无法使用Apache POI读取.doc文件的整个单元格 - Unable to read entire cell of a .doc file using Apache POI java servlet中的Apache Commons文件上传问题 - Apache Commons fileUpload problem in java servlet Apache Commons FileUpload getString()方法-Java - Apache Commons FileUpload getString() method - Java commons fileupload(Apache) - commons fileupload(Apache) 使用Apache Commons FileUpload - Using Apache commons FileUpload 如何解决java.io.IOException:使用apache POI读取Excel文件时出现读取错误 - How to solve java.io.IOException: Read error when reading Excel file using apache POI 标头签名无效; 在excel文档上使用Apache POI的IOException - Invalid header signature; IOException with Apache POI on excel document java.lang.ClassNotFoundException:org.apache.commons.fileupload.FileItemFactory - java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM