簡體   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