我正在尝试使用GridFS将一堆pdf文件插入到MongoDB中,但是在{em>路径>中设置文件名称时出现错误MongoGridFSException
em>,其中 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())
代替,但是当没有与之关联的文件名时,如何检索文件?我是否在第二个参数(options-array)中添加了文件名?
另外,如果我想知道存储文件的地雷/类型,我是否必须手动在元数据中指定它,还是在插入文件时自动确定?
TL; DR:我不知道如何使用GridFS并且php-docs质量很差。至少,有人能指出更好的例子/文档吗?
答案 0 :(得分:3)
当我调用$ 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&#34 ;;
希望有所帮助。网上有很多例子,但我同意PHP库文档有时候有点稀疏...最好把它看作围绕MongoDB shell函数的简单包装,所以首先要做的就是我看起来总是MongoDB站点本身,然后当我理解MongoDB中应该做什么时,我会查找该PHP功能的PHP文档。