2017-09-05 7 views
1

Ich kann Bildpfad in mongodb.Hier speichern ich Bildpfade im Array-Format. Unter Verwendung der Dokumenten-Id muss ich ein anderes Bild hinzufügen, d. H. Ich möchte einen anderen Bildpfad in dieses Array schieben. Meine Frage ist, wie kann ich einen anderen Bildpfad in mongodb speichern.Hinzufügen eines anderen Bildpfads in mongodb mit nodejs

Hier lade ich Bild mit html Datei hochladen. Dies ist mein Code index.html

<form id="uploadForm" 
     enctype="multipart/form-data" 
     action="/api/file" 
     method="post" 
> 
<input type="file" name="userFile"/> 
<input type="submit" value="Upload File" name="submit"> 

</form> 

Hier mein Server-Code ist server.js

var express=require('express'); 
var multer=require('multer'); 
var bodyParser = require('body-parser'); 
var Image=require('./models/image'); 
var Product=require('./models/product'); 
var mongoose=require('mongoose'); 
var path = require('path'); 
var rand; 
var urlencodedParser = bodyParser.urlencoded({ extended: false }); 

var config = require('./config'); 

mongoose.connect(config.mongoUrl); 
var db = mongoose.connection; 
db.on('error', console.error.bind(console, 'connection error:')); 
db.once('open', function() { 
    console.log("Connected correctly to server"); 
}); 
var app=express(); 
var ejs = require('ejs') 
app.set('view engine', 'ejs') 
var storage = multer.diskStorage({ 
    destination: function(req, file, callback) { 
     callback(null, './public/uploads') 
    }, 
    filename: function(req, file, callback) { 
     //callback(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname)) 
       //callback(null, file.originalname) 
     rand=Date.now() + path.extname(file.originalname); 

     callback(null, file.fieldname + '-' + rand); 

    } 

}) 
var upload = multer({ 
     storage: storage}); 
app.get('/api/file',function(req,res){ 
res.sendFile('E:/saas/nodejs/uploads/db/views/index.html'); 
}); 

app.post('/api/file',upload.single('userFile'), function(req, res) { 
    console.log(req.file); 
    console.log(req.file.path); 

    Image.create({imagePaths:[{imagepath:req.file.path}]},function(err,img){ 

      if (err) throw err; 
    console.log(img); 
     console.log('Path created!'); 
     var id = img._id; 

     res.writeHead(200, { 
      'Content-Type': 'text/plain' 
     }); 
     res.end('Added the image path with id: ' + id); 
    });  
}) 

var route=require('./routes/route'); 
app.use('/route',route); 
    app.listen(3000,function(){ 
    console.log("Server listening on 3000"); 
}); 

Nach dem Server läuft ich in dieser Browser verwenden http://localhost:3000/api/file dies mit Ich bin in der Lage Datei hochladen und ich werde mongodb Dokument erhalten ID als Antwort. Mit dieser ID kann ich einen anderen Bildpfad hochladen.

+0

Sie $ Push verwenden können. https://docs.mongodb.com/manual/reference/operator/update/push/ –

+0

@Dinesh hier meine Route/API/Datei im Server-Code ist mit Aktion in HTML-Form verknüpft.Mit diesem kann ich hochladen.Es ist verknüpft mit HTML-Formular. So, wie kann ich mit einer anderen Route schieben, dass die Route die ID finden und Upload-Datei –

+0

In Route machen ID als optional machen müssen. Auf der Server-Seite nach ID in der Route suchen, wenn sie dort ist, altes mongodb-Dokument mit $ push aktualisieren. andere weise neue schaffen. Um es optional zu machen, beziehen Sie sich bitte https://StackOverflow.com/questions/10020099/express-js-routing-optional-spat-param stattdessen einzelne Dateien gleichzeitig, warum können Sie nicht alle Bilder gleichzeitig hochladen ?. –

Antwort

1

Verwenden $ Push-to-Speicherpfad in Array

schemaName.findByIdAndUpdate(
    { req.headers.id }, 
    { $push: { imagePath: '/newPath' } }, 
    (err,response)=>{ 
     if(err){ 
      console.log(err); 
     } 

});