Javascript NodeJS:-如何使用multer将表单中的图像存储在mongodb中,并将相同的图像作为附件发送到邮件中
我正在实现一个网站,用户在其中输入详细信息。用户还可以选择在表单中附加图像/pdf(小于5MB)。 我想将整个图像存储在我的MongoDB中,并使用node NodeEmailer将图像发送到我的邮件帐户 其他一切都在工作,即我能够发送用户输入的详细信息邮件,但无法将图像保存在数据库中或发送到邮件帐户 下面是我已经实现的代码 server.js:-Javascript NodeJS:-如何使用multer将表单中的图像存储在mongodb中,并将相同的图像作为附件发送到邮件中,javascript,node.js,mongodb,mongoose,nodemailer,Javascript,Node.js,Mongodb,Mongoose,Nodemailer,我正在实现一个网站,用户在其中输入详细信息。用户还可以选择在表单中附加图像/pdf(小于5MB)。 我想将整个图像存储在我的MongoDB中,并使用node NodeEmailer将图像发送到我的邮件帐户 其他一切都在工作,即我能够发送用户输入的详细信息邮件,但无法将图像保存在数据库中或发送到邮件帐户 下面是我已经实现的代码 server.js:- const express = require("express"); const multer = require('multer'); cons
const express = require("express");
const multer = require('multer');
const path = require('path');
const app = express ();
app.set("view engine", "ejs");
const mongoose= require("mongoose");
const router = express.Router();
const nodemailer = require('nodemailer');
const smtpTransport = require('nodemailer-smtp-transport');
const User=require("./models/User");
// Multer image start
const storage = multer.diskStorage({
destination: function(req, file, cb) {
cb(null, './public/uploads/');
},
filename: function(req, file, cb) {
cb(null, new Date().toISOString().replace(/:/g, '-') + file.originalname); //replace is used to save in computer readable format
}
});
const upload = multer({
storage: storage,
limits: {
fileSize: 1024 * 1024 * 5
}
});
mongoose.connect("mongodb://localhost/emergen");
var bodyParser = require('body-parser');
//Middleware
app.use(express.static(__dirname + '/public'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
var uploadFile = upload.single('image');
app.post('/send', uploadFile, (req, res) => {
var name = req.body.name;
var email = req.body.email;
var phone = req.body.phone;
var message = req.body.message;
var image = req.file.originalname;
var newUser= {name:name,email:email,phone:phone,message:message,image:image};
User.create(newUser,function(err,newCreatedUser){
if(err){
console.log(err);
}
else{
console.log(newCreatedUser);
}
})
// Mailer implementation
var output = `
<p>You have a new Contact Request from Emergen Website</p>
<h3>Contact Details</h3>
<ul>
<li>Name: ${req.body.name}</li>
<li>Email: ${req.body.email}</li>
<li>Phone: ${req.body.phone}</li>
<li>Phone: ${req.file.path}</li>
</ul>
<h3>Message</h3>
<p>${req.body.message}</p>
`;
// <h3>Attachment</h3> Attachments if need to be added above in output
// <p>${req.body.attachment}</p>
var transporter = nodemailer.createTransport(smtpTransport({
service: 'gmail',
host: 'smtp.gmail.com',
auth: {
user: 'JackRogers@gmail.com',
pass: '******'
}, tls:{
rejectUnauthorized:false // remove when uploading on server
}
}));
var mailOptions = {
from: 'qwerty@gmail.com',
to: 'asd@gmail.com',
subject: 'New Enquiry for Emergen',
text: 'That was easy!',
html: output
};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
res.redirect('/contact-us');
});
});
我的表格,contact-us.ejs:-
<form class="text-center border border-light p-5" method="POST" action="send" enctype="multipart/form-data">
<p class="h4 mb-4">Contact us</p>
<!-- Name -->
<input type="text" id="FormName" class="form-control mb-4" placeholder="Name" name="name" required>
<!-- Email -->
<input type="email" id="FormEmail" class="form-control mb-4" placeholder="E-mail" name="email" required>
<input type="text" id="FormContact" class="form-control mb-4" placeholder="Contact No" name="phone" required>
<!-- Message -->
<div class="form-group">
<textarea class="form-control rounded-0" id="exampleFormControlTextarea2" rows="5" placeholder="Message" name="message" required></textarea>
</div>
<!-- Attachment -->
<div class="form-group">
<label for="name">Document Upload:</label>
<input type="file" class="form-control" id="image" name="image" >
</div>
<!-- Send button -->
<button class="btn btn-info btn-block" type="submit">Send</button>
</form>
联系我们
文件上载:
发送
请帮帮我。现在,在数据库中保存图像被认为是非常糟糕的做法 更好的方法是:
我正在上传一个名为uploads的目录中的图像。那部分正在发挥作用。我如何使用存储在数据库中的地址通过邮件/节点电子邮件实时发送图像?您是否在本地服务器上?通过本地开发,您可以将文件作为电子邮件附件附加。要将图像显示为电子邮件(HTM)的一部分,您必须具有可以使用internet访问的图像url。当映像位于本地计算机上时,无法执行此操作。
<form class="text-center border border-light p-5" method="POST" action="send" enctype="multipart/form-data">
<p class="h4 mb-4">Contact us</p>
<!-- Name -->
<input type="text" id="FormName" class="form-control mb-4" placeholder="Name" name="name" required>
<!-- Email -->
<input type="email" id="FormEmail" class="form-control mb-4" placeholder="E-mail" name="email" required>
<input type="text" id="FormContact" class="form-control mb-4" placeholder="Contact No" name="phone" required>
<!-- Message -->
<div class="form-group">
<textarea class="form-control rounded-0" id="exampleFormControlTextarea2" rows="5" placeholder="Message" name="message" required></textarea>
</div>
<!-- Attachment -->
<div class="form-group">
<label for="name">Document Upload:</label>
<input type="file" class="form-control" id="image" name="image" >
</div>
<!-- Send button -->
<button class="btn btn-info btn-block" type="submit">Send</button>
</form>