ドラッグアンドドロップファイルアップロード機能を使用して既存のアプリケーションを拡張したいと考えています。このアプリケーションは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にあります。
感謝を参照してください、それはそれだ:)私は6.18時代を事前にWicketに貼り付けたように...しばらくの間、この1に見つめられているようです! – verhage