2012-12-17 78 views
13

我想將用戶選擇的文件保存到MongoDB。如何正確地將文件添加到BSON對象以將其添加到MongoDB?如果我的方法不正確,請指向正確的方向。如何將文件保存到MongoDB?

以下是客戶端代碼。這個jQuery函數在每個輸入字段上收集文本(需要文件部分的幫助)並將其作爲BSON對象發送到服務器。

$('#add').click(function() 
      { 
       console.log('Creating JSON object...'); 
       var classCode = $('#classCode').val(); 
       var professor = $('#professor').val(); 
       var description = $('#description').val(); 
       var file = $('#file').val(); 

       var document = 
       { 
        'classCode':classCode, 
        'professor':professor, 
        'description':description, 
        'file':file, 
        'dateUploaded':new Date(), 
        'rating':0 
       }; 
       console.log('Adding document.'); 
       socket.emit('addDocument', document); 
      }); 

形式的HTML:

<form> 
     <input type = 'text' placeholder = 'Class code' id = 'classCode'/> 
     <input type = 'text' placeholder = 'Document description' id = 'description'/> 
     <input type = 'text' placeholder = 'Professor' id = 'professor'/> 
     <input type = 'file' id = 'file'/> 
     <input type = 'submit' id = 'add'/> 
    </form> 

服務器端代碼中的CoffeeScript:

#Uploads a document to the server. documentData is sent via javascript from submit.html 
      socket.on 'addDocument', (documentData) -> 
       console.log 'Adding document: ' + documentData 
       db.collection 'documents', (err, collection) -> 
        collection.insert documentData, safe:false 
        return 

回答

9

要存儲在MongoDB中的文件,你應該嘗試使用GridFS
你可以找到一些關於使用GridFS的教程(example)。
檢查您的MongoDB驅動程序的API,並嘗試實施它在你的項目

+1

我一直在閱讀有關GridFS,但我找不到一個示例顯示如何將文件從客戶端發送到服務器,以便將其保存在GridFS中。有任何來源? – crzrcn

+1

我不擅長Node.js,但可以查看一些教程(https://gist.github.com/1071705和http://prazjain.wordpress.com/2012/04/18/upload-and -display文件合的NodeJS應用/)。在本教程中,他們將文件保存到常規文件系統,並且應該用'GridFS'代碼代替'fs' –

+1

首先,嘗試將文件上傳到您的文件系統,以確保您的代碼正常工作。然後用'GridFs'替換它 –

23

如果你的文件是足夠(16兆)小,而不是添加了GridFS的複雜性,你可以嵌入文件到BSON文檔。

BSON具有二進制數據類型,任何驅動程序都應該提供訪問權限。

如果你的文件是一個文本文件,你可以將它作爲一個UTF8字符串存儲。

+2

你能舉例說明如何使用這種類型?我有文件在我的文件系統 - 如何把它放入數據庫? – gstackoverflow

+0

我也沒有得到任何好文件或任何地方上傳小文件沒有Gridfs – adi

+0

您可以發表一個新的問題,關於如何使用驅動程序的二進制數據類型與文件中的數據。 – paulmelnikow