2016-07-30 24 views
0

ドラッグアンドドロップファイルアップロード機能を使用して既存のアプリケーションを拡張したいと考えています。このアプリケーションはJetty + Wicketに基づいています。 DropzoneJSは良い方法のようです。 Dropzoneはすべてのフロントエンド作業を提供しています。バックエンドにワイヤリングするだけです。マルチパートPOSTリクエストにアップロードされたファイルがありません

もっと簡単に言われていることは、判明したとおりです。まず、Wicket quickstartのテストアプリケーションを作成しました。私はホームページにdropzoneを追加しました:

<!DOCTYPE html> 
<html> 
    <head> 
     <script src="https://rawgit.com/enyo/dropzone/master/dist/dropzone.js"></script> 
     <link rel="stylesheet" href="https://rawgit.com/enyo/dropzone/master/dist/dropzone.css"> 
    </head> 
    <body> 
     <form action="/upload" class="dropzone"></form> 
    </body> 
</html> 

Dropzoneは単にそのリポジトリに含まれています。サーバーでは、私は/アップロード時のリソース参照をマウント:

public class FileUploadResourceReference extends ResourceReference 
{ 
    public FileUploadResourceReference(String name) 
    { 
     super(FileUploadResourceReference.class, name); 
    } 

    @Override 
    public IResource getResource() 
    { 
     return new FileUploadResource(); 
    } 
} 

FileUploadResourceは、アップロードされたファイルの処理を処理します:ファイルをアップロードするとき

public class FileUploadResource extends AbstractResource 
{ 
    @Override 
    protected ResourceResponse newResourceResponse(Attributes attributes) 
    { 
     ServletWebRequest request = (ServletWebRequest) attributes.getRequest(); 

     try 
     { 
      MultipartServletWebRequest multipartRequest = request 
     .newMultipartWebRequest(Bytes.megabytes(100), "ignored"); 
      Map<String, List<FileItem>> files = multipartRequest.getFiles(); 

      List<FileItem> fileItems = files.get("file"); 
      for (FileItem fileItem : fileItems) 
      { 
       saveFile(fileItem); 
      } 
     } 
     catch (FileUploadException e) 
     { 
      e.printStackTrace(); 
     } 

     return null; 
    } 

    private void saveFile(FileItem fileItem) 
    { 
     // not implemented 
    } 
} 

が今ここでの問題だ、ドロップゾーンは、POSTリクエストを送信します私のhttp://localhost:8080/uploadに要求はマルチパート要求として認識されますが、fileパラメータは存在しません。 forループに入るNULLポインタ例外がスローされます。

java.lang.NullPointerException 
    at com.test.FileUploadResource.newResourceResponse(FileUploadResource.java:31) ~[classes/:?] 
    at org.apache.wicket.request.resource.AbstractResource.respond(AbstractResource.java:629) ~[wicket-core-7.4.0.jar:7.4.0] 
    at org.apache.wicket.request.handler.resource.ResourceRequestHandler.respond(ResourceRequestHandler.java:105) ~[wicket-core-7.4.0.jar:7.4.0] 
    at org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandler.respond(ResourceReferenceRequestHandler.java:108) ~[wicket-core-7.4.0.jar:7.4.0] 

ここで何が起こっているのかわかりません。 Dropzoneのウェブサイトによると、フォームの宣言はうまくいくはずです。おそらくDropzoneのバグ?おそらくないだろう。マルチパート・フォーム要求を拒否するJetty構成パラメーターがありますか?少なくとも私はそれについて聞いたことはないとは思わない。

私のテストアプリケーションの完全なソースコードはGitHubにあります。

答えて

2

1つのメソッドcall-multipartRequest.parseFileNames()が不足しています。 #getFiles()の前に実行する必要があります。

http://wicketinaction.com/2012/11/uploading-files-to-wicket-iresource/

+0

感謝を参照してください、それはそれだ:)私は6.18時代を事前にWicketに貼り付けたように...しばらくの間、この1に見つめられているようです! – verhage

関連する問題