문제

Play Framework2를 사용하여 이미지를 MySQL에 업로드하려고합니다.

PLAY 프레임 워크 1.24에서는 "play.db.jpa.Blob"및 "multipart/form-data"를 사용하여 이미지를 MySQL에 업로드합니다.

그러나 Play Framework2는 Blob가 없습니다 ... "multipart/form-data"를 사용하여 이미지를 MySQL으로 업로드하려면 어떻게합니까?

도움이 되었습니까?

해결책

저장소 파일을 데이터베이스에 확실하게 하지 않아야합니다. 그것은 나쁜 생각입니다. 대신 파일을 일부 로컬 또는 먼 파일 시스템에 업로드하고 데이터베이스에 파일 이름 / FilePath를 저장해야합니다.

편집 : 저의 대답 이후, 조금 더 설명하기 위해 노력할 것입니다 :

  1. 먼저 BLOB 유형으로 작업 할 때 PLAY Framework에서 BLOB 유형으로 작업하면 데이터베이스에 BLOB 필드가 생성됩니다. 그러나 모든 데이터베이스가 BLOB 타입 뒤에 동일한 구현을 갖는 것은 아닙니다. 일부 RDM에서 BLOB 타입은 제한된 저장소와 다른 (예 : MySQL)의 최대 크기를 갖습니다. BLOB 필드의 최대 크기는 구성에 따라 결정됩니다.

  2. 둘째, 데이터베이스에서 파일을 검색하고 사용자에게 보내는 경우 메모리 사용량이 폭발 할 것입니다. 단순히 사용자에게 보내기 전에 BLOB 필드를 메모리에로드합니다.

  3. 플러스, 데이터베이스에 많은 파일이 저장되어있는 경우 매우 빨리 과부하됩니다. (요청). 다음 이동은 데이터베이스를 새 컴퓨터에서 움직일 것입니다. 그러나 많은 데이터가 저장되면 다음 병목 현상이 데이터베이스가 아니라 응용 프로그램과 데이터베이스 서버 간의 대역폭이 아닐 수 있습니다.

  4. 파일 저장을 위해 데이터베이스를 사용하는 것은 항상 데이터베이스가 생성 한 오버 헤드로 인해 직접 파일 시스템 읽기보다 더 느리고 더 많은 메모리를 소비 할 것입니다.

    파일 저장 엔진으로 데이터베이스를 사용하면 쉽고 빠르게 설치 솔루션이지만 프로젝트 중에 실제로 일을 변경할 수있는 Inconvegnect가 가득합니다.

다른 팁

다른 방법으로 데이터베이스의 사진에 대한 참조를 저장할 수 있습니다.

보기에서 :
<form action="@routes.Application.index" method="POST" enctype="multipart/form-data">
           Photo<input type="file" name="photo"> <br>
             <input type="submit" value="Submit">    
</form>
.

컨트롤러 :

MultipartFormData body = request().body().asMultipartFormData();
            FilePart photo = body.getFile("photo");
            if (photo != null) {
                String fileName = photo.getFilename();
                File file = photo.getFile();
                File newFile = new File(play.Play.application().path().toString() + "//public//uploads//"+ "_" + fileName);
                file.renameTo(newFile); //here you are moving photo to new directory          
                System.out.println(newFile.getPath()); //this path you can store in database
            }
}
.

BLOB 객체가 투명한 객체를 처리하는 것입니다.파일을 파일 시스템에 저장하고 DB에 참조를 저장합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top