2016-07-30 2 views
0

기존 응용 프로그램을 끌어서 놓기 파일 업로드 기능으로 확장하려고합니다. 응용 프로그램은 Jetty + Wicket을 기반으로합니다. DropzoneJS은 좋은 방법입니다. Dropzone은 모든 프론트 엔드 작업을 제공하며 백엔드에 연결해야합니다.다중 POST 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 
    } 
} 

이제 여기에 문제가 있어요는 DROPZONE는 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

하나의 메소드 호출 - multipartRequest.parseFileNames()가 누락되었습니다. #getFiles()를 실행하기 전에이 작업을 수행해야합니다.

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

+0

감사를 참조, 그게 내가 6.18 시대 ... 잠시 동안이 일에보고 된 사전 개찰구에 갇혀 한 것처럼 :) 보인다입니다! – verhage