2016-03-22 7 views
0

Haben Sie ein kleines Problem, und nicht einmal wirklich sicher, wo ich anfangen soll. Ich verwende ng-Datei-Upload, um die Datei hochzuladen. Die Datei wird auf dem Server angezeigt und in einer temporären Datei gespeichert. Ich kann es öffnen und es ist immer noch eine JPG-Datei (wenn das die Datei ist).Speichern von Bild in Mungo verschlingt die Daten

So ziemlich sicher ist es das Speichern in der Datenbank selbst, die das Problem verursacht. Kurz , las ich die Datei, Base64-Codierung verwendet wird, dann speichert sie in dem Schema:

router.post('/rest/imgupload', multipartyMiddleware, function(req, res, next){ 
    var file = req.files.file; 
    console.log(file.name); 
    console.log(file.type); 
    file.owner = req.user.id; 
    for(var i in file){ 
     console.log("ID " + i + " DATA: " +file[i]); 
    } 

    fs.readFile(file.path, 'base64', function(err,data){ 
     if(err){ 
      log.error("File read error: "+err) 
      res.status(500).send("Internal server error!") 
     } else { 
      //file.data=Buffer(data).toString('base64'); 
      //console.log("This is what comes out" + data); 
      var Image = new mgImage(file); 
      Image.save(function(err,doc){ 
       if(err){ 
        log.error("Database write error: " + err); 
        res.status(500).send("Internal server error!") 
       } else { 
        log.info("Deleting file: " + file.path) 
        //fs.unlink(file.path, function(err){ 
        // if(err){ 
        //  log.error("Failed to delete file: " + file.path) 
        //  res.status(500).send("Internal server error!") 
        // } else{ 
        res.status(201).send({ imageId: doc._id }) 
        // } 
        //}) 
       } 
      }) 
     } 
    }) 


}); 

die Daten speichern selbst verwende ich einen Puffer wie folgt:

var sketchSchema = mongoose.Schema({ 
    name: String, 
    size: String, 
    type: String, 
    data: { 
     type: Buffer, 
     required: true 
    }, 
    owner: {type: ObjectId, ref: 'User'}, 
}); 

Allerdings, wenn ich versuchen Sie, es als ein Bild mit Base64 Encoding es schlägt fehl. Und es scheint, als wären die in den Daten gespeicherten Daten einfach kein JPEG-Bild.

Irgendwelche Vorschläge zu dem, was ich vermisse, oder zumindest was in der Welt mache ich falsch.

+0

Ich auch überprüft, indem Sie das Bild erstellen, dann manuell auf eine Base64-codierte Datei aktualisieren, und der Rest des Codes funktioniert. Was auch immer ich falsch mache, es scheint damit verbunden zu sein, wie ich die Datei in die Datenbank lese, was auch immer in BinData 0 unter Daten gespeichert ist, ist kein base64-kodiertes Bild. – vrghost

Antwort

0

es herausgefunden, versuchen Sie nicht, die fs.read zu sagen, die Dateien als 'base64'

Ändern Sie diese Zeile zu lesen:

fs.readFile(file.path, 'base64', function(err,data){ 

zu

fs.readFile(file.path, function(err,data){ 

Dann einfach Setzen Sie das Bild auf image.data = Daten // die Rohdaten aus der Datei, keine Notwendigkeit, es als Base64 zu verschlüsseln scheint es.