2010-11-22 5 views

답변

37

이미지와 같은 이진 데이터를 저장하려면 GridFS을 사용하거나 자신 만의 구현을 구현할 수 있습니다. driver 다운로드 및 src/test/com/mongodb/gridfs/GridFSTest.java보기)

편집 : 오늘 운이 좋다! 나는 완전한 코드를 만들었다;) Enjoy! 작은 (< 1메가바이트) 용

package mongodb.testing.java; 
import com.mongodb.*; 
import com.mongodb.gridfs.*; 
import java.io.*; 

public class Main { 

    public static byte[] LoadImage(String filePath) throws Exception { 
     File file = new File(filePath); 
     int size = (int)file.length(); 
     byte[] buffer = new byte[size]; 
     FileInputStream in = new FileInputStream(file); 
     in.read(buffer); 
     in.close(); 
     return buffer; 
    } 

    public static void main(String[] args) throws Exception { 
     //Load our image 
     byte[] imageBytes = LoadImage("C:/Temp/bear.bmp"); 
     //Connect to database 
     Mongo mongo = new Mongo("127.0.0.1"); 
     String dbName = "GridFSTestJava"; 
     DB db = mongo.getDB(dbName); 
     //Create GridFS object 
     GridFS fs = new GridFS(db); 
     //Save image into database 
     GridFSInputFile in = fs.createFile(imageBytes); 
     in.save(); 

     //Find saved image 
     GridFSDBFile out = fs.findOne(new BasicDBObject("_id" , in.getId())); 

     //Save loaded image from database into new image file 
     FileOutputStream outputImage = new FileOutputStream("C:/Temp/bearCopy.bmp"); 
     out.writeTo(outputImage); 
     outputImage.close(); 
    } 
} 
+0

코드에 감사드립니다. 나는 또한 같은 과정을위한 코드를 만들었다. 그러나 너는 내 것보다 간단하다! –

+0

그래서 HTML 파일에 쓰려면 서버의 그림 위치를 HTML로 출력 하시겠습니까? – Jeff

+0

'LoadImage'메소드를 이용해 주셔서 감사합니다. –

2

글쎄 AFAIK 님, mongodb 에 이미지를 저장할 수 없으므로 이미지에 대한 링크를 저장할 수 있습니다. 이미지가 작 으면 100x100 픽셀과 같이 U가 높지는 않습니다. U는 이미지를 바이너리로 저장하고 개조하고 이미지를 즉석에서 볼 수 있습니다. 그러나 이미지를 렌더링하는 데는 시간이 걸릴 것이므로 링크를 저장하고 해당 이미지를 가져 와서 동적으로 채울 것을 제안합니다.

GridFS를 사용하여 더 큰 이진 객체를 저장할 수 있습니다. 당신이 MongoDB의 새로운 때문에

것은, 한 번 봐 걸릴 :

Link 1

Link 2

Mongo+JAVA Tutorial

GridFS specs

을 당신은 또한 항상, 내가에 요청할 수 있습니다 또한 mongoDB에 익숙하지 않아서 초보자를 돕는 데 신경 쓰지 않을 것입니다 : D

+0

mongodb에서 GridFS 파일을 일반 문서와 어떻게 연결합니까? 말하자면 큰 이미지를 업로드하고 GridFS에 저장합니다. 파일의 다른 세부 사항을 문서의 모든 모음에 저장합니다. 내가 컬렉션에서 문서를 읽을 때 어떻게 관련 이미지를 검색 할 수 있습니까 ??? –

+1

거기에 API 메서드가 있으면 그것을 모르는 경우 두 값 모두 같은 필드를 사용하여 필드 사이에 링크를 만듭니다. 따라서 첫 번째 컬렉션의 값을 발견하면 값으로 이미지 컬렉션을 쿼리하고 해당 이미지를 찾습니다. – theTuxRacer

5

이미지 I 이진 필드에 저장 좋을 것 (바이트 [] 자바); 더 큰 파일을 가지고 있다면 GridFS가 더 잘 작동 할 것입니다.

간단한 바이너리 필드를 사용하여 내 문서에 많은 미리보기 이미지를 직접 저장합니다.

Morphia (http://code.google.com/p/morphia)를 사용하여 POJO를 저장합니다.

+0

몽구스에 많은 이미지를 저장하려고합니다. 미리보기 이미지와 일반 크기 모두. 나에게 pojo는 필수적이다? !!! –

+0

몽고에서 이미지를 어떻게 표현할 수 있는지 말해 줄 수 있습니까? like, { "x": 1, "y": 2} 어떻게 이미지를 나타 냅니까? –

+0

이미지를 저장하는 방법? 하나의 문서에 모두 있습니까? 또는 하나의 컬렉션에서 문서를 분리 할 수 ​​있습니까?또는 {{ "name": "Tamil", "age": 23, "Images"{ "image1": 123.jpg, "image2": abc.jpg와 같은 문서에 여러 이미지를 저장하고 싶다면 }}'java로 어떻게 할까? –

관련 문제