2014-07-15 10 views
0

서버에 업로드 된 캔버스 요소에서 웹캠으로 찍은 사진을 가져 오려고합니다. 나는 플레이 프레임 워크 1.2.5.3을 이용하고 있고 나는 HTML에게 다음과 같은 코드가 있습니다 :HTML 캔버스 이미지를 컨트롤러 메서드로 전달할 때 널 포인터가

<canvas id="canvas" width="200" height="180"></canvas> 
<button id="snap" onClick="testIT()">Snap Photo</button> 

을 캔버스에 영상을 업로드하도록되어 양식 :

<form action="@{Drivers.addPhoto2}" method="POST" enctype="multipart/form-data"> 
<input type="file" name="f1" id="dp" /> 
<input type="submit" name="submit" value="Upload" /> 
</form> 

을 클릭 은 "스냅"버튼에 testIT() 메소드가 호출되고 : 그것은 다음과 같습니다 컨트롤러에서

function testIT() { 
window.alert("testing..."); 

var image = new Image(); 
var canvas = canvas = document.getElementById("canvas"); 

image.src = canvas.toDataURL("image/png"); 
window.alert("varialbles created"); 

document.getElementById('dp').value = image; 
window.alert("all done"); 
} 

:

@Util 
private static void addPhoto(Object driverPhoto) { 
    System.out.println("addphoto statede"); 
    if (driverPhoto == null) { 
     System.out.println("is null"); 
     //return; 
    } else { 
     System.out.println("not null"); 
    } 

    System.out.println("is class: = " + driverPhoto.getClass()); 
    Driver driver = User.find("byEmail", Security.connected()).first(); 
    driver._save(); 
    index(); 
} 

public static void addPhoto2(Object f1) { 
    System.out.println("photo2 started"); 
    addPhoto(f1); 
} 

이제 "스냅"버튼이 눌려지면 그림이 그려지고 (웹캠에서이 부분이 작동 함) 캔버스에 표시됩니다. 그런 다음 그림이 양식의 INPUT으로 전송되고 거기에서 새 그림 (유형 : BLOB)이 작성되고 드라이버에 추가되는 서버로 그림이 업로드됩니다. 실제로 일어나는 것 : 그림이 캔버스에 그려지고 업로드 버튼을 누르면 addPhoto2 메서드가 호출되지만 addPhoto에서 nullpointer 예외가 발생합니다. 여기에 전체 오류 메시지 :

요청 POST/드라이버/addphoto2 (라인 (56)의 주위에 /app/controllers/Drivers.java에서)

실행 예외에 대한 내부 서버 오류 (500) NullPointerException이 발생했습니다 널 (null) controllers.Drivers에서 java.lang.NullPointerException이 :에 의한 Invocation.HTTP 요청 (! 플레이)에서 play.mvc.ActionInvoker.invoke (ActionInvoker.java:237)에서

play.exceptions.JavaExecutionException. addPhoto (Drivers.j (ActionInvoker.java:508) 에서 컨트롤러 .Drivers.addPhoto2 play.mvc.ActionInvoker.invoke에서 play.mvc.ActionInvoker.invokeControllerMethod (ActionInvoker.java:479) 에서 play.mvc.ActionInvoker.invokeControllerMethod (ActionInvoker.java:484) (ActionInvoker.java:161)에서. .. 1 더

내가 뭘 잘못하고 있니?

답변

0

설명서의 Advanced bindings 섹션을 보면 업로드 된 파일이 File 개체에 바인딩된다는 것을 알 수 있습니다.

재생으로 파일 업로드가 쉽습니다. 다중 파트/양식 데이터로 인코딩 된 요청을 사용하여 파일을 서버에 게시 한 다음 java.io.File 유형을 사용하여 파일 오브젝트를 검색하십시오. 내가 코드를 가지고 가고 FileaddPhoto2f1 매개 변수를 테스트 할 때

, 그것은 완벽하게 잘 작동합니다. f1Object으로 지정하면 매개 변수가 설정되지 않습니다 (따라서 null). 나는 자동 Play 매개 변수 바인딩 프로세스가 파일 매개 변수를 개체로 지정할 때 혼란스러워하고 그것을 설정하는 것을 거부합니다.

+0

고마워요! 방금 ​​Object에서 File로 모든 것을 변경했지만 여전히 동일한 NullPointerException을 얻고 있습니다. – Paperman

+0

@Paperman 같은 줄에 똑같은 예외가 생기면 다른 테스트가 잘못되어 테스트 응용 프로그램 (게시 한 코드에서 작성)에서 문제가 해결되어야합니다. 내 테스트 애플리케이션과 코드의 유일한 큰 차이점은 모델이 없기 때문에'addPhoto'의 마지막 3 행을 주석 처리했다는 것입니다. – gpgekko

+0

@Paperman 여러분이 지금 당면하고있는 문제는 JPA 측과 관련이 있다고 생각합니다. 모델에 사진을 어떻게 추가합니까? (여기의 코드에서는 보이지 않습니다.) – gpgekko