PHP с БД Mongo хранит и просматривает изображения - PullRequest
0 голосов
/ 29 марта 2012

Я успешно сохранил файлы изображений в MongoDB, используя PHP, когда я получаю изображения из Mongo db, у меня возникла проблема, может кто-нибудь дать решение Вот мой код:

<?php
$m = new Mongo(); 
$db = $m->selectDB("example"); 
$article = $db->articles;
$files = $article->find();
$gridFS = $db->getGridFS();
?>
<table>
<?php
    $i=1;
    foreach ($files as $storedfiles) {
    ?>
    <tr>
        <td width="30%"><strong><?php echo $i; ?></strong></td>
        <td width="70%">
            <?php //echo $storedfiles["_id"]; ?>
            <?php echo "Id :".$storedfiles["_id"]; ?>
            <?php echo "Title :".$storedfiles["title"]; ?>
            <?php echo "Keywords :".$storedfiles["keywords"]; ?>

            <?php echo "Image :".$storedfiles["image"]; ?>
            <?php   $image = $gridFS->findOne(array('_id' => new MongoId($storedfiles["image"]))); 
header('Content-type: image/jpg;');
            echo $image->getBytes();
    ?>


        </td>
    </tr>
    <?php
    $i++;
    }
    ?>
    </table>

1 Ответ

3 голосов
/ 06 апреля 2012

Ваш пример на самом деле не имеет смысла («статьи» не является коллекцией GridFS, поэтому его документы _ids, вероятно, не будут соответствовать файлам GridFS), но вот пример вставки / возврата изображения:

$m = new Mongo();
$db = $m->example;
$gridFS = $db->getGridFS();

$id = 123;

// store
$gridFS->storeFile("someFile.jpg", array("_id" => $id));

// retrieve
echo $gridFS->findOne(array("_id" => $id))->getBytes();

Попробуйте запросить $db->fs->files, чтобы узнать, для каких _id вы должны запрашивать.

Кроме того, вы не можете создать MongoId из произвольной строки. Вы можете создать его с 24-значной шестнадцатеричной строкой. Просто используйте другой тип для поля _id, если вы хотите что-то другое (как указано выше).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...