2012-03-19 33 views
1

我試圖使用GridFS的插入一堆PDF格式的文件轉換成MongoDB中,卻得到了一個MongoGridFSException與消息:錯誤路徑,其中是設置文件文件系統上的pdf文檔的絕對路徑。插入文件

我用一個很簡單的CLI腳本:

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

我覺得缺乏GridFS的令人不安的文檔。 MongoGridFSstoreFile()中的例子都只是顯示一個簡單的文件名作爲第一個參數;如果數據是從這個文件名中檢索的,那麼腳本假定什麼basePath(cwd,__DIR__或者完全不同的東西?)或者我可以只添加絕對路徑(根據錯誤消息判斷,可能不是)?

我在考慮用storeBytes(file_get_contents($file->getPathname())來代替,但是如果沒有文件名與它關聯,我該如何檢索文件?我是否在第二個參數(options-array)中添加文件名?

此外,如果我想知道存儲文件的地雷/類型,是否必須手動在元數據中指定它或在插入文件時自動確定?

TL; DR:我不知道如何使用GridFS,而且php-docs的質量很差。至少可以有人指出更好的示例/文檔?

回答

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 
     )); 

,這將創建一個這樣的條目:在這種情況下,$ uploaded_file = 「/ tmp目錄/ phpNhAmGK」

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" 
} 

,所以,

希望有所幫助。網絡上有很多例子,但我同意PHP庫文檔有時會有點稀疏......最好把它看作是圍繞MongoDB shell函數的一個簡單包裝,所以我看起來第一個地方總是MongoDB網站本身,然後當我明白MongoDB應該做什麼時,我會查找該PHP功能的PHP文檔。

+0

我正要編輯問題。看起來好像某種編碼問題弄亂了路徑中的char並導致了最初的問題不幸的是,當我現在運行我的腳本時,返回「Segmentation fault」,它似乎來自MongoDB,而不是PHP,而且是可能是由於'$ extras'中的某些內容。 – dbrumann 2012-03-19 12:06:55

+0

嘗試對發送給MongoDB的內容執行var_dump,然後在Mongo shell中重新創建該命令 - 然後查看是否出現seg錯誤。另外,看看你使用的是什麼版本的MongoDB,看看有沒有使用MongoDB PHP擴展版本的任何已知問題(從phpinfo()獲取這個) – 2012-03-19 12:11:13

+0

你可以從我的例子中看到哪些字段是自動添加的,需要添加哪些字段。在我的例子中,我實際上覆制了長度屬性(並將其稱爲「大小」)。如果需要,您需要添加MIME類型。您可能需要保存文件名,而不需要以後使用的路徑。 – 2012-03-19 12:15:15