2017-08-17 3 views
0

Ich habe mich online umgesehen und habe nur ein paar Methoden zum Arbeiten im Testcode bekommen, aber nie meinen eigentlichen Code. Ich versuche, den Benutzer ein Bild in .jpg hochladen zu lassen, und ich möchte später darauf zugreifen, um angezeigt zu werden. Hier ist, was ich bis jetzt bekommen habe.Bilder speichern und von MongoDB aus aufrufen

fs = require("fs"); 
multer= require("multer"); 

app.use(multer({ dest: "./uploads/:id", 
rename: function (fieldname, filename) { 
return filename; 
}, 
})); 

dann die Datei aus dem Formular zu ziehen, ich bin mit:

image: req.body.image 

Wie für den Code in die DB habe ich nicht sicher bin, ist es das, was ich mit kam aber nicht zu sicher, ob es funktioniert oder nicht. Ich bin auch ahnungslos, wo ich es in meinen größeren Weg, den ich bereits für den Rest der Form habe, einordnen kann. Hier

ist der kleine Code:

app.post("/api/photo",function(req,res){ 
var Startup = new Startup(); 
Startup.img.data = fs.readFileSync(req.files.userPhoto.path); 
Startup.img.contentType = "image/jpg"; 
Startup.save(); 
}); 

Und hier ist der Arbeits (außer Bild) Route Code für den Rest des Formulars.

// CREATE add new startup to database 
app.post("/startup-submit", function(req, res) { 
    // Get data from form 
    I create the variables here, removed as too much code and code for the image draw is above.  
    //Pass data through | Write better explaination later 
    var newStartup = {about_startup: about_startup, social_media: social_media, about_founder: about_founder}; 
    Startup.create(newStartup, function(err, newlyCreatedStartup){ 
     if(err){ 
      console.log(err); 
     } else { 
      // Redirect back to show all page 
      res.redirect("/startups"); 
     } 
    }); 
}); 

Ich kenne die Strecke Pfade auf dem kleinen und großen Code überlagern sich nicht, aber ich war mit, dass für die Prüfung.

Wie kann ich diesen Code einbinden und korrigieren, so dass ich ein Bild/eine Datei in meine DB hochladen kann?

Dann, wie würde ich es nennen, eine Quelle mit EJS zu sein. Wäre es nur sein „> Dies ist das beste, das ich kam haben mit. Ich bin sicher, dass es weit von rechts obwohl ist.

+0

Fehler in meinem Beitrag, sollte sein: Wäre es nur

Antwort

0

die documentation Folgen.

(1) dest ist, wo Sie Ihre Dateien speichern. ./uploads/:id sieht nicht wie ein gültiges Ziel.

(2) Wo hast du bekommen rename Option?

(3) speichern Sie nicht das eigentliche Bild in der Datenbank. speichern Sie einfach den Dateinamen an.

Es sollte mehr aussehen wie

var fs = require("fs"), 
    multer = require("multer"); 

var upload = multer({ 
    storage: multer.diskStorage({ 
     destination: function (req, file, cb) { 
      // here is where you would add any extra logic to create directories 
      // for where you will upload your file 
      cb(null, './uploads') 
     }, 
     filename: function (req, file, cb) { 
      // here is where you would add any extra logic to rename your file 
      cb(null, file.fieldname); 
     } 
    }) 
}); 

app.post("/api/photo", upload.single('fieldname'), function (req, res, next) { 
    // at this point, the file should have been uploaded 
    // you can get info about your file in req.file 
    console.log(req.file); 

    var startup = new Startup(); 
    startup.img.data = req.file.filename; 
    startup.img.contentType = req.file.mimetype; 
    startup.save(function (err) { 
     if (err) return next(err); 
     // send response 
    }); 
}); 

Sie finden könnten fs-extra nützlich, besonders fs.mkdirs() wenn Sie Verzeichnisse erstellen möchten z.B. /this/path/does/not/exist.

Verwandte Themen