2016-02-09 3 views
0

У меня есть форма, с помощью которой пользователь может загрузить изображение. Я хочу загрузить его с помощью nodejs, сохранить в DB (mongodb) и вернуться к шаблону (EJS).Каков самый простой способ загрузки изображений в Nodejs/Express

Я прочитал о gridFS, но я ищу простейший способ просто ЗАГРУЗИТЬ ИЗОБРАЖЕНИЕ.

EJS:

<h2>Enter your Data</h2> 
<form action="/test" method="POST"> 
<input type="username" placeholder="username" name="Username" /> <br /> 
<input type="text" placeholder="title" name="Name" /><br /> 
<textarea name="Description" ></textarea><br /> 
<input type="link" name="Clink"/><br /> 
<input type="file" name="imgUpload"/><br /> 
<input type="submit" value="Submit" id="btn"/> 
</form> 



var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var mongoose = require('mongoose'); 
var fs = require('fs'); 

var routes = require('./routes/index'); 
var users = require('./routes/users'); 
var about = require('./routes/about'); 
//var contact = require('./routes/contact'); 
//var blogData = require('./routes/blogData'); 

var app = express(); 


//Connect DB 
mongoose.connect('mongodb://localhost:27017/dataTest'); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'ejs'); 

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', routes); 
app.use('/users', users); 
app.use('/about', about); 
//app.use('/contact', contact); 
//app.use('/blogData', blogData); 

//Scheme 
var Schema = new mongoose.Schema({ 
    _id : String, 
    Name : String, 
    Description : String, 
    Clink : String 
}); 

//Model 
var BlogPost = mongoose.model('Blog', Schema); 

app.post('/test',function(req,res){ 
    new BlogPost({ 
     _id : req.body.Username, 
     Name : req.body.Name, 
     Description : req.body.Description, 
     Clink : req.body.Clink 
    }).save(function(err, doc){ 
    if(err){ 
     console.log('boo'); 
    } 
    else{ 
     console.log('inner'); 
     res.redirect('contact'); 
     res.end(); 
     } 
    }) 
}); 
+0

https://github.com/ expressjs/multer –

ответ

2

Чтобы загрузить изображение в node.js вы можете просто использовать base64 кодирования, и вставить в MongoDb.

И при извлечении вы можете получить base64 закодированное изображение и преобразовать его в формат изображения.

<input type="file" id="fileinput" name ="image" multiple="multiple" accept="image/*" /> 

Сначала конвертировать изображения в base64 и сохранить в базе данных:

router.post('/upload',function(req,res){ 
var base64ToBuffer = new Buffer(req.image, 'base64');//Convert to base64 

//Write your insertcode of MongoDb 

res.end("Image uploaded Successfully"); 
}); 

После этого, чтобы отобразить изображение, которое вы можете написать другой маршрутизатор:

router.get('/showImage', function(req, res) { 
    // Write code to retrieve image base64 code 
    var imageBase64; 
    render image to jade template 
}) 
+0

Спасибо, но как я могу сделать изображение в шаблоне EJS? Просто используя переменную imageBase64? Нам не нужно хранить его в БД? –

+0

Actully, у меня нет знаний шаблона EJS, но вы можете изменить свой механизм шаблонов EJS на HTML, чтобы вы могли использовать HTML в качестве Front. –

+0

Попробуйте эту ссылку http://stackoverflow.com/questions/30963743/display-dynamically-an-image-using-express-and-ejs –

Смежные вопросы