2012-09-21 6 views
-2

Je suis en train de stocker des images dans mongo après l'avoir téléchargé avec requestEnregistrement d'une image dans MongoDB

ici est mon code qui provoque une image endommagée à stocker dans db.

request('http://test.jpg', function (error, response, image) { 

    db.images.insert(

     { 
      file_name: 'test.jpg', 
      image: new Buffer(image) 
     }, 

     function(err){ 

      //mongojs callback 

     } 
    ); 
}); 

S'il vous plaît noter que je suis en utilisant le module mongojs et le stockage des images dans le document que le type régulier BinData.

Aussi, si j'écris l'image dans un fichier, lisez-la puis enregistrez l'image dans la base de données, puis il n'y a pas de corruption. Mais je ne veux pas faire cela comme mon intention d'éviter complètement le système de fichiers. Je suis jolie cela a quelque chose à voir avec l'encodage ou les tampons mais je n'en connais pas assez pour résoudre mon problème.

+0

Si ce code fonctionnait lorsque vous avez enregistré l'image dans un fichier et que vous l'avez relue avant de l'enregistrer dans la base de données, le problème n'est probablement pas lié à cette partie du code, n'est-ce pas? Ou suis-je mal compris? – JohnnyHK

+0

Je pense que la raison pour laquelle cela fonctionne quand je sauvegarde dans un système de fichiers puis dans la base de données c'est parce que le codage correct ou les tampons sont utilisés. Mais quand je le fais directement, je ne le règle pas correctement. – saeed

+0

En quoi le fichier jpeg est-il corrompu? Êtes-vous capable de créer un lien vers une image originale et corrompue afin que quelqu'un puisse comparer les différences? – Stennie

Répondre

0

Si vous ne voulez pas utiliser une solution de stockage d'image appropriée comme gridfs, vous pouvez encoder en base64 vos images.

How can you encode a string to Base64 in JavaScript?

Cela vous donne une chaîne que vous pouvez stocker dans mongo.

+1

Il stocke la représentation binaire qui est suffisante. Stocker en base64 est pour les pages html etc et côté client JS normal c'est côté serveur SJ sous la forme de node.js – Sammaye

Questions connexes