2012-06-17 1 views
0

사용자에게 Apache Commons Streaming API를 사용하여 Excel 스프레드 시트에서 정보를 얻으려고합니다. 내 양식이 어떻게 보이는지이를FileUpload (Apache Commons) 및 Java POI IOException : 전체 헤더를 읽을 수 없습니다.

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); 
    } 


} 

:

<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> 

내가 사용

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) 

이 정보를 처리 ReportServlet의 코드입니다 : 나는 다음과 같은 오류가 계속 유리 물고기. 이 메시지를 계속받는 이유는 무엇입니까?

답변

0

루프에서 처음 도착한 멀티 파트 오브젝트는 스프레드 시트 파일로 간주됩니다. 양식 자체도 제공됩니다. 단서는 13 바이트 길이 될 일이 메시지

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

공지 사항, 양식의 업로드 값이 Upload Report입니다이다.

Firebug 또는 Fiddler와 같은 브라우저 기반 디버깅 도구를 사용하면 쉽게 볼 수 있습니다. 이러한 도구 중 하나는 도구 세트에 있어야합니다.

+0

문제가있는 위치를 확인하기 위해 브라우저에서 전송되는 내용을 조사해야합니다. FireBug, Fiddler 또는 Wireshark를 사용하여 데이터 스트림을 검사하십시오. –