有没有一种方法可以让用户直接在cloudinary上上传图像并将图像的URL存储在Node.js App的mongoDB数据库中

时间:2020-06-09 07:06:45

标签: node.js mongodb file-upload cloudinary

我目前正在使用multer存储图像,以在公共位置上传文件夹,然后使用缓冲区存储到mongodb并转换回64bit以显示它,这使网站速度变慢。 我知道我对此很陌生,确实需要逐步的过程和说明。谢谢

App.js->

const blogSchema=new mongoose.Schema({
name:String,
title:String,
image:String,
body:String,
uploadImg:{ 
    data: Buffer, 
    contentType: String 
},
created:{
    //here we define a default date in case the user doesnt type one
    type:Date,default:Date.now
}})

multer and storage->

function checkFileType(file,cb){   
//allowed extensions
//console.log(file);
const filetypes=/jpeg|jpg|png|gif/;
const extname=filetypes.test(path.extname(file.originalname).toLowerCase());
const mimetype=filetypes.test(file.mimetype);
if(mimetype && extname){
    return cb(null,true)
}else{
    //console.log(file);
    cb('Error : Only Images Accepted');
}

}

var Storage = multer.diskStorage({
    destination:"./public/uploads/",
    filename:(req, file, callback)=>{
        callback(null, file.fieldname+"-"+Date.now()+path.extname(file.originalname))
    },


})

var upload = multer({storage:Storage,
    limits:{fileSize:10000000},
    fileFilter:function(req,file,cb){
        checkFileType(file,cb)},      
        }
).single('file');

发布后路线->

 var obj = { 
                   name:req.body.name,
                    title:req.body.title,
                     image:req.body.image,
                        body:req.body.body,       
                         uploadImg: { 
                        data: fs.readFileSync(path.join( './public/uploads/' + req.file.filename)), 
                        contentType: 'image/png'} }

                        Blog.create((obj),

在show.ejs->

<img src="data:blog/<%=blog.uploadImg.contentType%>;base64,<%=blog.uploadImg.data.toString('base64')%>" alt="someImage">

0 个答案:

没有答案