2012-12-17 22 views
13

Ich möchte eine benutzerdefinierte Datei in MongoDB speichern. Wie füge ich die Datei korrekt zum BSON-Objekt hinzu, um sie zu MongoDB hinzuzufügen? Wenn mein Ansatz falsch ist, zeigen Sie bitte in die richtige Richtung.Wie speichere ich eine Datei in MongoDB?

Unten ist der Client-Code. Diese jQuery-Funktionen erfassen den Text (benötigen Hilfe zum Dateiteil) für jedes Eingabefeld und senden ihn als BSON-Objekt an den Server.

$('#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); 
      }); 

Der HTML-Code der Form:

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

Die serverseitige Code in 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 

Antwort

9

-Dateien speichern in MongoDB Sie sollten GridFS
Sie können verwenden versuchen, finden Sie einige Tutorials zum Arbeiten mit GridFS (example). Prüfen
Ihre MongoDB Fahrer API und versuchen Sie es

+1

Ich habe über GridFS gelesen, aber ich kann kein Beispiel finden, das zeigt, wie die Datei vom Client an den Server gesendet wird, um sie im GridFS zu speichern. Haben Sie irgendwelche Quellen? – crzrcn

+1

Ich bin nicht gut in Node.js, aber Sie können sich einige Tutorials ansehen (https://gist.github.com/1071705 und http://prazjain.wordpress.com/2012/04/18/upload-and -display-Datei-in-Nodejs-Anwendung /). In diesen Tutorials speichern sie die Datei in einem normalen Dateisystem, und Sie sollten 'fs' durch' GridFS' Code ersetzen –

+1

Versuchen Sie zuerst, Datei in Ihr Dateisystem hochzuladen, um sicherzustellen, dass Ihr Code funktioniert. Und dann ersetzen Sie es mit 'GridFs' –

23

Wenn Ihre Dateien sind klein genug (unter 16 Megabyte), in einem Projekt zu implementieren, anstatt die Komplexität der GridFS hinzuzufügen, können Sie einfach die Dateien in BSON einbetten Unterlagen.

BSON hat einen binären Datentyp, auf den alle Treiber Zugriff gewähren sollten.

Wenn Ihre Datei eine Textdatei ist, können Sie sie einfach als UTF8-Zeichenfolge speichern.

+2

Können Sie ein Beispiel für die Verwendung dieses Typs zeigen? Ich habe Datei auf meinem Dateisystem - wie man es in die Datenbank einträgt? – gstackoverflow

+0

Ich habe auch keine gute Dokumentation oder Beispiel irgendwo für das Hochladen kleiner Dateien ohne Gridfs – adi

+0

erhalten Sie könnten eine neue Frage darüber, wie Sie den binären Datentyp des Treibers mit Daten aus einer Datei verwenden. – paulmelnikow

Verwandte Themen