2012-05-17 123 views
1

我目前使用兩個文件顯示所有圖像,一個獲取內容和第二顯示它(或嘗試過)MongoDB的GridFS的

我需要做的是通過存儲在GridFS的顯示這些圖像迭代總之,我可以得到的文件名進行迭代,並且文件名是查找的paramiter內,但它不工作,我只是得到一個破碎的形象,這裏是代碼:

Display.php的

<?php 
    // open connection to MongoDB server 
    $conn = new Mongo; 

    // access database 
    $db = $conn->database; 

    // get GridFS files collection 
    $grid = $db->getGridFS(); 

    $cursor = $grid->find(); 

    foreach ($cursor as $obj) {     // iterate through the results 
     $filename = $obj->getFilename().'<br/>'; 
    echo "<img src='newupload.php?filename=".$filename."'>"; 
    echo $filename; 
    } 


?> 

這裏是進入gridFS的那個

<?php 
    $filename = $_GET['filename']; 
try { 
    // open connection to MongoDB server 
    $conn = new Mongo; 

    // access database 
    $db = $conn->database; 

    // get GridFS files collection 
    $grid = $db->getGridFS(); 

    // retrieve file from collection 
    header('Content-type: image/png'); 
    $file = $grid->find(array('filename' => $filename)); 

    // send headers and file data 

    echo $file->getBytes(); 
    exit; 

    // disconnect from server 
    $conn->close(); 
} catch (MongoConnectionException $e) { 
    die('Error connecting to MongoDB server'); 
} catch (MongoException $e) { 
    die('Error: ' . $e->getMessage()); 
} 
?> 

非常感謝

回答

2

的問題是,MongoGridFS對象的find()方法返回一個光標,而不是一個對象MongoGridFSFile;光標沒有getBytes()方法。您收到的實際輸出可能是您的catch子句中的die(...)消息之一,而瀏覽器無法將其顯示爲圖像。

而不是find(array('filename' => $filename)),你應該使用findOne(array('filename' => $filename))

請注意,如果有多個文件具有相同的文件名,則可能需要下降到較低的級別以確保找到所需的一個(您需要哪一個取決於您的需求;也許它是第一個,也許這是最近的,或者也許是基於其他一些標準)。在這種情況下,您可以手動查詢GridFS集合(它被命名爲「fs.files」),找到您想要返回的文件,並將其_id傳遞給的get()方法。