2012-12-17 18 views
13

Chcę zapisać wybrany plik użytkownika na MongoDB. Jak poprawnie dodać plik do obiektu BSON w celu dodania go do MongoDB? Jeśli moje podejście jest nieprawidłowe, wskaż we właściwym kierunku.Jak zapisać plik w MongoDB?

Poniżej znajduje się kod klienta. Ta funkcja jQuery zbiera tekst (potrzebuję pomocy w części pliku) na każdym polu wejściowym i wysyła je do serwera jako obiekt 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 formularza:

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

Serwer kod boczny w 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 

Odpowiedz

9

do przechowywania plików w MongoDB należy spróbować użyć GridFS
Można znaleźć kilka samouczków dotyczących pracy z GridFS (example).
Sprawdź API Twojego MongoDB kierowcy i spróbować wdrożyć go w swoim projekcie

+1

Czytałem o GridFS, ale nie mogę znaleźć przykładu, który pokazuje, jak wysłać plik z klienta na serwer, aby zapisać go w GridFS. Masz jakieś źródła? – crzrcn

+1

Nie jestem dobry w Node.js, ale możesz przejrzeć kilka samouczków (https://gist.github.com/1071705 i http://prazjain.wordpress.com/2012/04/18/upload-and -display-file-in-nodejs-application /). W tych samouczkach zapisują pliki do zwykłego systemu plików i powinieneś zamienić 'fs' na' GridFS' code –

+1

Przede wszystkim spróbuj przesłać plik do swojego systemu plików, aby upewnić się, że twój kod działa. A następnie zamień go na 'GridFs' –

23

Jeśli pliki są wystarczająco (poniżej 16 megabajtów) mały, zamiast dodawania złożoności GridFS, można po prostu umieścić pliki do BSON dokumenty.

BSON ma binarny typ danych, do którego powinien zapewniać każdy sterownik.

Jeśli twój plik jest plikiem tekstowym, możesz go zapisać jako ciąg znaków UTF8.

+2

Czy możesz pokazać przykład użycia tego typu? Mam plik na moim systemie plików - jak umieścić go w bazie danych? – gstackoverflow

+0

Nie otrzymałem również żadnej dobrej dokumentacji ani przykładu do przesłania małych plików bez Gridfs – adi

+0

Możesz zadać nowe pytanie o sposób użycia danych binarnych sterownika z danymi z pliku. – paulmelnikow

Powiązane problemy