2013-12-10 2 views
0

GridFS를 사용하여 이미지를 MondoDB 컬렉션에 저장하려고합니다. 이를 테스트하기 위해 다음을 만들었습니다 :MongoDB GridFS 이미지가 올바르게로드되지 않았습니다.

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
</head> 
<body> 

<?php 
// open connection 
$m = new MongoClient(); 
$db = $m->selectDB('ImageDatabase'); 
$gridUploads = $db->getGridFS('images'); 

// save image 
$fileName = 'C:\Users\Thomas\Pictures\commits.png'; 
$gridUploads->storeFile($fileName); 

// load image 
$doc = $gridUploads->findOne($fileName); 

// dsplay image 
header('Content-type: image/png'); 
echo $doc->getBytes(); 

?> 


</body> 
</html> 

이렇게하면 이미지를 컬렉션에 업로드 한 다음 컬렉션에서 동일한 이미지를 가져 와서 표시해야합니다.

이 후 컬렉션의 내용은 다음과 같습니다

{ 
    "_id" : ObjectId("52a6fcdd1dc38f0c3c0016bf"), 
    "filename" : "C:\\Users\\Thomas\\Pictures\\commits.png", 
    "uploadDate" : ISODate("2013-12-10T11:37:01.000Z"), 
    "length" : 179952, 
    "chunkSize" : 262144, 
    "md5" : "768d618923442668ca2a60f02be59d52" 
} 

인 print_r ($의 문서) :

MongoGridFSFile Object 
(
    [file] =&gt; Array 
     (
      [_id] =&gt; MongoId Object 
       (
        [$id] =&gt; 52a6fcdd1dc38f0c3c0016bf 
       ) 

      [filename] =&gt; C:\Users\Thomas\Pictures\commits.png 
      [uploadDate] =&gt; MongoDate Object 
       (
        [sec] =&gt; 1386675421 
        [usec] =&gt; 0 
       ) 

      [length] =&gt; 179952 
      [chunkSize] =&gt; 262144 
      [md5] =&gt; 768d618923442668ca2a60f02be59d52 
     ) 

    [gridfs:protected] =&gt; MongoGridFS Object 
     (
      [w] =&gt; 1 
      [wtimeout] =&gt; 10000 
      [chunks] =&gt; MongoCollection Object 
       (
        [w] =&gt; 1 
        [wtimeout] =&gt; 10000 
       ) 

      [filesName:protected] =&gt; images.files 
      [chunksName:protected] =&gt; images.chunks 
     ) 

    [flags] =&gt; 0 
) 

그러나 결과의 본문 내용은 다음과 같습니다

<img style="-webkit-user-select: none" src="http://localhost/path-to/the-script.php"> 

모든 ideads 왜?

감사합니다.

+0

결과 콘텐츠는 이미지 태그입니까? – Sammaye

+0

그래, 실제로 일어날 해야할지 모르겠지만, src 속성이 PHP 파일에 대한 경로입니다 img 태그를 짐작하지 않습니다 ^^ – tpei

+0

나는 그것이 실제로 어떻게 가능한지 전혀 모른다 ... – Sammaye

답변

0

첫 번째 코드 예제 (HTML과 PHP가 혼합되어 있음)를 기반으로 HTML 자체 내에 이미지의 바이트를 표시합니다. 응답 본문이 전송 된 후 header()으로 전화하는 문제도 있습니다 (header() PHP docs에서 논의 된 첫 번째 문제 중 하나). 그저 <img> 태그의 src 속성이 Content-type 헤더를 설정하고 이미지 바이트를 반환하는 별도의 PHP 스크립트를 가리키고 있다는 것을 의미한다고 가정합니다.

당신이 정말로 출력 페이지 응답 내에서 이미지 바이트를 의미하는 경우, 당신은 데이터 URI를 사용하는 것이 좋습니다 :

을하지만,에 src 속성을 가리키는 PHP 스크립트가 더 좋은 옵션입니다 (특히 큰 이미지의 경우). 원본 스크립트가 생성 된 방식을 설명 할 수 없습니다.

<img style="-webkit-user-select: none" src="http://localhost/path-to/the-script.php"> 

...하지만 여기서 분명히 목표로해야하는 것은 무엇입니까?

MongoGridFSFile::getBytes()의 사용과 관련하여 특히 큰 이미지의 경우 getResource()이 더 효율적이라는 점에 유의해야합니다. 리소스로 작업하면 한 번에 메모리에 두 개의 청크 (GridFS에서로드) 만로드하여 메모리 소비를 줄일 수 있습니다. 파일 내용을 출력하기 위해 getResource()을 사용하는 간략한 예는 here입니다.

관련 문제