2016-12-02 544 views
3

sparkを使用してhtml形式からファイルをアップロードします。 HTMLフォームSpark Java:マルチパート構成が提供されていないため、パーツを処理できません。

Spark.post("/upload", "multipart/form-data", (request, response) -> { 

     String location = "temporary";   // the directory location where files will be stored 
     long maxFileSize = 100000000;  // the maximum size allowed for uploaded files 
     long maxRequestSize = 100000000; // the maximum size allowed for multipart/form-data requests 
     int fileSizeThreshold = 1024;  // the size threshold after which files will be written to disk 

     MultipartConfigElement multipartConfigElement = new MultipartConfigElement(
      location, maxFileSize, maxRequestSize, fileSizeThreshold); 
     request.raw().setAttribute("org.eclipse.multipartConfig", 
      multipartConfigElement); 

     Collection<Part> parts = request.raw().getParts(); //Line 50 where error is there 
     for (Part part : parts) { 
      System.out.println("Name: " + part.getName()); 
      System.out.println("Size: " + part.getSize()); 
      System.out.println("Filename: " + part.getSubmittedFileName()); 
     } 

     String fName = request.raw().getPart("xmlfile").getSubmittedFileName(); 
     System.out.println("Title: " + request.raw().getParameter("title")); 
     System.out.println("File: " + fName); 

     Part uploadedFile = request.raw().getPart("xmlFile"); 
     Path out = Paths.get("temporary/" + fName); 
     try (final InputStream in = uploadedFile.getInputStream()) { 
      Files.copy(in, out); 
      uploadedFile.delete(); 
     } 
     // cleanup 
     multipartConfigElement = null; 
     //parts = null; 
     uploadedFile = null; 

     return "OK"; 
}); 

以下の通りである:私は、ファイルをアップロードしていた場合

<form class="ui fluid action input" id="fileForm" method="post" action="/sparkapp/upload" enctype = "multipart/form-data"> 
    <input type="text" name="filePath" readonly> 
    <input type="file" name="xmlFile"> 
    <button type="submit" value="Submit"> 
</form> 

、私は500を取得しています:と内部サーバーエラーに続いて、ポストルートを処理するために、私のJava関数でありますスタックトレースを次

java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided 
    at org.apache.catalina.connector.Request.parseParts(Request.java:2734) 
    at org.apache.catalina.connector.Request.getParts(Request.java:2701) 
    at org.apache.catalina.connector.Request.getPart(Request.java:2885) 
    at org.apache.catalina.connector.RequestFacade.getPart(RequestFacade.java:1089) 
    at javax.servlet.http.HttpServletRequestWrapper.getPart(HttpServletRequestWrapper.java:362) 
    at com.amulya.Application$2.handle(Application.java:50) 
    at spark.RouteImpl$1.handle(RouteImpl.java:61) 
    at spark.http.matching.Routes.execute(Routes.java:61) 
    at spark.http.matching.MatcherFilter.doFilter(MatcherFilter.java:127) 
    at spark.servlet.SparkFilter.doFilter(SparkFilter.java:173) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1100) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:687) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

は、次の質問を踏襲したが答えは動作しませんでした: SparkJava: Upload file did't work in Spark java framework

私はEclipse IDEとTomcatサーバーを使用しています。

この問題を解決してください。

答えて

1

私はスパークでtomcatサーバーを使用しているため、フィルタを設定しました。つまり、spark.servlet.SparkFilterです。 this answerを通じ

私は実際に、私はHttpServletRequest.getPart*またはHttpServletRequest.getParameter*が呼び出されたときにTomcatが自動的にmultipart/form-dataリクエストボディを解析する必要があるようにWebapp/META-INF/context.xmlまたはTomcat/conf/server.xmlでWebアプリケーションの<Context>要素で

allowCasualMultipartParsing="true"

を設定するために必要なことが判明、ターゲットサーブレットに@MultipartConfigアノテーションを付けていない場合でも、

の参考のため、以下のリンクを参照してください。

http://sparkjava.com/documentation.html#other-webserver

https://stackoverflow.com/a/8050589/2256258

http://tomcat.apache.org/tomcat-7.0-doc/config/context.html

https://examples.javacodegeeks.com/enterprise-java/tomcat/tomcat-context-xml-configuration-example/

0

あなたはまた、内部のサーブレット構成でマルチパートのconfig設定を提供する必要がありますweb.xmlファイル。私は以下の例を挙げました:

<servlet> 
     <servlet-name>MyServlet</servlet-name> 
     <servlet-class>com.example.servlet.MyServlet</servlet-class> 
     <multipart-config> 
       <max-file-size>xxxxx</max-file-size> 
       <max-request-size>yyyyy</max-request-size> 
     </multipart-config> 
</servlet> 
関連する問題