2015-02-06 3 views
1

Play Framework를 처음 사용합니다. REST 전체 백엔드 애플리케이션에 Play 프레임 워크 v2.2.6을 사용하고 있습니다. 파일 업로드, 특히 이미지 파일에 REST API를 제공하고 싶습니다. Java로 응용 프로그램을 개발 중입니다.Play framework 2.2.x : Java로 이미지 업로드

많은 검색을했지만 Java에서 샘플 예제를 얻지 못했습니다. 누구나 비슷한 일을 했나요?

  1. 이미지 파일을 업로드 할 수있는 경로를 제공합니다 :

    이 내가하고 싶은 것입니다.

  2. 컨트롤러에서 이미지 파일인지 확인하고 싶습니다. 그렇지 않으면 잘못된 요청을 반환합니다.
  3. 이미지 파일 인 경우 서버의 파일 시스템에 저장하고 해당 파일에 위치를 저장하십시오.
  4. 저장된 파일을 검색하기위한 경로를 제공하십시오.

답변

2

며칠 전 내가 파일을 업로드하고 데이터베이스에 BLOB로 저장하기위한 최소한의 샘플 응용 프로그램을 작성 : Github 어쩌면 ... 당신을 위해 유용

+0

. 권리? DB 대신 파일 시스템에 이미지를 저장하고 파일 시스템에서 이미지를 검색하려면 어떻게 수정해야합니까? – Shivansh

+0

바이트 배열 (Image-class)로 파일을 쓰는 대신 다음과 같이 말할 수 있습니다 : image.renameTo (new File ("public/images /", name)); 그것을 파일 시스템에 저장합니다. – DirtyDan

+0

그리고 예를 들어 http : // localhost : 9000/assets/images/을 통해 다시 가져옵니다. – DirtyDan

1

는 HTML 입력 제어

<input type="file" id="myFile" multiple size="50" onchange="myFunction()"> 

자바 스크립트 함수

function myFunction(){ 
var x = document.getElementById("myFile"); 
var txt = ""; 
var src=""; 
if ('files' in x) { 
    if (x.files.length == 0) { 
     txt = "Select one or more files."; 
    } else { 
     for (var i = 0; i < x.files.length; i++) { 
      txt += "<br><strong>" + (i+1) + ". file</strong><br>"; 
      var file = x.files[i]; 



      var data = new FormData(); 
      data.append('picture', file); 
      jQuery.ajax({ 
       url: '/upload', 
       data: data, 
       cache: false, 
       contentType: false, 
       processData: false, 
       type: 'POST', 
       success: function(data){ 
        alert(data); 
       } 
      }); 


      if ('name' in file) { 
       txt += "name: " + file.name + "<br>"; 
      } 
      if ('size' in file) { 
       txt += "size: " + file.size + " bytes <br>"; 
      } 
     } 
    } 
} 
else { 
    if (x.value == "") { 
     txt += "Select one or more files."; 
    } else { 
     txt += "The files property is not supported by your browser!"; 
     txt += "<br>The path of the selected file: " + x.value; // If the browser does not support the files property, it will return the path of the selected file instead. 
    } 
} 

CONSOLE.LOG (TXT); }

경로

POST /upload       controllers.Application.upload 

그래서 당신은 메모리 데이터베이스에 업로드 된 이미지를 저장하는 컨트롤러

public static Result upload() { 
     MultipartFormData body = request().body().asMultipartFormData(); 
     FilePart picture = body.getFile("picture"); 
     if (picture != null) { 
     String fileName = picture.getFilename(); 
     String contentType = picture.getContentType(); 
     File file = picture.getFile(); 
     return ok("File uploaded"); 
     } else { 
     flash("error", "Missing file"); 
     return redirect(routes.Application.index());  
     } 
    } 
+0

설명서의 사본 붙여 넣기, 어떻게 저장 할 바이트가 생깁니 까? –

+0

@ Al-Mothafar 당신은 그것을 InputStream으로 할 수 있습니다. inStream = new FileInputStream (file); byte [] buffer = 새 바이트 [1024]; OutputStream을 int 길이로 쓸 수 있습니다. \t \t \t \t \t \t \t \t \t \t 동안 ((길이 = inStream.read (완충액))> 0) { \t \t \t \t \t \t outStream.write (버퍼, 0, 길이); \t \t \t \t \t} –

관련 문제