繁体   English   中英

如何使用Lithium和GridFS在不同的集合中存储不同类型的文件?

[英]How to store files of different types in separate collections using Lithium and GridFS?

我有一个看起来像这样的模型:

class Pdf extends \lithium\data\Model
{

    protected $_meta = array('source' => 'fs.files');
    protected $_schema = array('_id'=>array('type'=>'id'));

    public $file;

    /**
    * @param $zipfile string The full name and path of a zip file
    * @param $filename string
    */
    public static function loadFromFile($zipfile, $filename){
        $name = 'zip://'.$zipfile.'#'.$filename;
        $pdf = Pdf::create(); 
        $pdf->file = file_get_contents($name);
        $pdf->filename = $filename;
        $pdf->metadata = ["filename" => $filename, "zipfile" => $zipfile];
        return $pdf;
    }
}

static函数获取zip存档的全名和存档中文件的名称,创建模型,从存档文件加载内容,设置一些元数据并返回模型。 这用于我正在编写的控制台命令,它将遍历一个zip文件列表,每个文件包含一堆pdfs,并将pdfs添加到数据库中。

当我保存模型时,pdf确实被添加到数据库中。 我可以从MongoDB控制台查看所有pdf,即使用db.fs.files.find() 我也可以使用mongofiles命令从数据库中获取pdf。

但是,如果不将ffs文件保存在fs.files下,我可以将它们存储在fs.files.pdfs下,这真的很好。 这是因为我还计划在同一个数据库中存储jpeg和文本文档。

如果我将类中的$ _meta更改为array('source' => 'fs.files.pdfs') ,我的控制台命令似乎将pdf文档输出到终端而不是添加它(随便,我想知道为什么锂会这样做!)

我检查了文档并且无法弄清楚我做错了什么。 有没有办法让Lithium根据所使用的型号将我的文件存储在不同的集合中?

(如果我的术语不准确,我很抱歉;这是我第一次尝试在基本教程之外使用Lithium和MongoDB。)

但是,如果不将ffs文件保存在fs.files下,我可以将它们存储在fs.files.pdfs下,这真的很好。 这是因为我还计划在同一个数据库中存储jpeg和文本文档。

目前,你不能命名你的源fs.files.pdfs ,但pdfs.filesphotos.files ......

我检查了文档并且无法弄清楚我做错了什么。 有没有办法让Lithium根据所使用的型号将我的文件存储在不同的集合中?

请点击此处突出显示的行: https//github.com/UnionOfRAD/lithium/blob/master/data/source/MongoDb.php#L387-390

这是锂电处理的方式

是的,我相信我们在IRC上讨论过这个问题。 这是MongoDB的限制,我不相信你可以拥有多个GridFS前缀(如果我错了,有人会纠正我)。

如果你只是想找到一种通过不同模型操作不同文件类型的方法,我建议创建单独的模型,然后修改它们的默认查询以在条件中包含'type' => 'pdf' ,或者沿着这些线条。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM