Вставьте файлы в MongoDBs GridFS - PullRequest
1 голос
/ 19 марта 2012

Я пытаюсь вставить кучу pdf-файлов в MongoDB с помощью GridFS, но получаю MongoGridFSException с сообщением: ошибка настройки файла имя в путь , где name - это абсолютный путь к pdf-документу в файловой системе.

Я использую очень простой CLI-скрипт:

$it = new DirectoryIterator(__DIR__ .'/files');
while ($it as $file) {
    $grid->storeFile($file->getPathname(), array('metadata' => $metadata));
}

Я нахожуОтсутствие документации для GridFS беспокоит.Примеры в MongoGridFS и storeFile () просто показывают простое имя файла в качестве первого аргумента;если данные извлекаются из этого имени файла, какой basePath предполагает сценарий (cwd, __DIR__ или что-то совсем другое?) или я могу просто добавить абсолютный путь (судя по сообщению об ошибке, вероятно, нет)?

Я обдумывал использование storeBytes(file_get_contents($file->getPathname()) вместо этого, но как мне получить файл, если с ним не связано имя файла?Нужно ли добавлять имя файла во второй аргумент (массив параметров)?

Кроме того, если я хочу узнать тип / тип хранимого файла, нужно ли указывать его в метаданных вручную или этоопределяется автоматически при вставке файла?

TL; DR: я понятия не имею, как работать с GridFS и php-docs низкого качества.Может, по крайней мере, кто-нибудь укажет лучшие примеры / документацию?

1 Ответ

3 голосов
/ 19 марта 2012

Я использую полный путь к файлу при вызове $ grid-> storeFile ().Кроме того, да, я храню MIME-тип в метаданных.Итак, мой вызов выглядит так:

$id = $grid->storeFile($uploaded_file, 
        array(
           'ownerNodeUuid'    => $additional['nodeUuid'],
           'ownerField'       => $additional['fieldUuid'],
           'originalFilename' => $name,
           'type'             => $type,
           'size'             => $size
        ), 
        array(
           'safe' => 1
        ));

, и это создает следующую запись:

db.myPrefix.files.findOne();
{
    "_id" : ObjectId("4ea1912af3e145731c000010"),
    "ownerNodeUuid" : "74DAB098-4A6F-4172-84AB-EDAFAA9FE22D",
    "ownerField" : "C58AD24C-7A8C-402A-BE82-2D315BC5F7C0",
    "originalFilename" : "image001.png",
    "type" : "image/png",
    "size" : 73679,
    "filename" : "/tmp/phpNhAmGK",
    "uploadDate" : "Fri Oct 21 2011 16:35:06 GMT+0100 (BST)",
    "length" : 73679,
    "chunkSize" : 262144,
    "md5" : "3e36620fdfebdf9fbf311e996a4bc46c"
}

, поэтому в этом случае $ uploaded_file = "/ tmp / phpNhAmGK";

Надеюсь, это поможет.В Интернете есть множество примеров, но я согласен, что документация библиотеки PHP иногда немного скудна ... Лучше всего думать об этом как о простой обертке вокруг функций оболочки MongoDB, поэтому первое, на что я обращаю внимание, это всегдасам сайт MongoDB, а затем, когда я понимаю, что что-то должно делать в MongoDB, я ищу документацию PHP для PHP-версии этой функциональности.

...