2012-12-17 32 views
13

Voglio salvare un file selezionato dall'utente in MongoDB. Come aggiungo correttamente il file all'oggetto BSON per aggiungerlo a MongoDB? Se il mio approccio non è corretto, ti preghiamo di indicare la direzione giusta.Come posso salvare un file su MongoDB?

Di seguito è riportato il codice cliente. Queste funzioni jQuery raccolgono il testo (necessita di aiuto sulla parte del file) su ogni campo di input e lo invia al server come oggetto 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); 
      }); 

Il HTML del modulo:

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

Il codice lato server 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 

risposta

9

Per memorizzare i file in MongoDB si dovrebbe cercare di utilizzare GridFS
Puoi trova alcuni tutorial su come lavorare con GridFS (example).
Controlla API del conducente MongoDB e cercare di attuarlo nel progetto

+1

Ho letto su GridFS, ma non riesco a trovare un esempio che mostra come inviare il file dal client al server per salvarlo in GridFS. Hai qualche fonte? – crzrcn

+1

Non sono bravo in Node.js, ma puoi consultare alcuni tutorial (https://gist.github.com/1071705 e http://prazjain.wordpress.com/2012/04/18/upload-and -display-file-in-nodejs-application /). In questo tutorial salvano il file su un normale filesystem, e dovresti sostituire 'fs' con il codice' GridFS' –

+1

Prima di tutto, prova a caricare il file sul tuo file system per assicurarti che il tuo codice funzioni. E poi sostituirlo con 'GridFs' –

23

Se i file sono abbastanza (sotto i 16 megabyte) piccolo, invece di aggiungere la complessità di GridFS, si può semplicemente inserire i file in BSON documenti.

BSON ha un tipo di dati binari, a cui qualsiasi driver deve fornire l'accesso.

Se il file è un file di testo, è possibile archiviarlo come stringa UTF8.

+2

Puoi mostrare esempio come usare questo tipo? Ho un file sul mio filesystem - come inserirlo nel database? – gstackoverflow

+0

Inoltre non ho ricevuto alcuna buona documentazione o esempio da nessuna parte per caricare piccoli file senza Gridfs – adi

+0

È possibile pubblicare una nuova domanda su come utilizzare il tipo di dati binari del driver con i dati da un file. – paulmelnikow

Problemi correlati