Play Framework 2 파일을 MySQL으로 업로드하십시오
-
11-12-2019 - |
문제
Play Framework2를 사용하여 이미지를 MySQL에 업로드하려고합니다.
PLAY 프레임 워크 1.24에서는 "play.db.jpa.Blob
"및 "multipart/form-data"
를 사용하여 이미지를 MySQL에 업로드합니다.
그러나 Play Framework2는 Blob
가 없습니다 ... "multipart/form-data"
를 사용하여 이미지를 MySQL으로 업로드하려면 어떻게합니까?
해결책
저장소 파일을 데이터베이스에 확실하게 하지 않아야합니다. 그것은 나쁜 생각입니다. 대신 파일을 일부 로컬 또는 먼 파일 시스템에 업로드하고 데이터베이스에 파일 이름 / FilePath를 저장해야합니다.
편집 : 저의 대답 이후, 조금 더 설명하기 위해 노력할 것입니다 :
-
먼저 BLOB 유형으로 작업 할 때 PLAY Framework에서 BLOB 유형으로 작업하면 데이터베이스에 BLOB 필드가 생성됩니다. 그러나 모든 데이터베이스가 BLOB 타입 뒤에 동일한 구현을 갖는 것은 아닙니다. 일부 RDM에서 BLOB 타입은 제한된 저장소와 다른 (예 : MySQL)의 최대 크기를 갖습니다. BLOB 필드의 최대 크기는 구성에 따라 결정됩니다.
-
둘째, 데이터베이스에서 파일을 검색하고 사용자에게 보내는 경우 메모리 사용량이 폭발 할 것입니다. 단순히 사용자에게 보내기 전에 BLOB 필드를 메모리에로드합니다.
-
플러스, 데이터베이스에 많은 파일이 저장되어있는 경우 매우 빨리 과부하됩니다. (요청). 다음 이동은 데이터베이스를 새 컴퓨터에서 움직일 것입니다. 그러나 많은 데이터가 저장되면 다음 병목 현상이 데이터베이스가 아니라 응용 프로그램과 데이터베이스 서버 간의 대역폭이 아닐 수 있습니다.
-
파일 저장을 위해 데이터베이스를 사용하는 것은 항상 데이터베이스가 생성 한 오버 헤드로 인해 직접 파일 시스템 읽기보다 더 느리고 더 많은 메모리를 소비 할 것입니다.
파일 저장 엔진으로 데이터베이스를 사용하면 쉽고 빠르게 설치 솔루션이지만 프로젝트 중에 실제로 일을 변경할 수있는 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>
.
<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에 참조를 저장합니다.