【发布时间】:2020-12-11 08:51:09
【问题描述】:
我正在将图像从表单上传到我的 S3 存储桶。提交表单时,它会创建一个新的 mongoDB 对象。我正在使用key: function (req, file, cb) {cb(null, Date.now().toString())},
为上传提供唯一的名称。我的问题是,当我保存新的 mongoDB 对象时,我不确定如何引用唯一的 S3 密钥。
我承认这可能是一个愚蠢的问题,但我对 mongoDB/mongoose 不是很有经验,这是我第一次使用 S3。
如果有任何意见或建议,我将不胜感激
// productController.js
// if errors on form
else {
let product = new Product({
business: req.body.businessName,
productName: req.body.productName,
category: req.body.productCategory,
price: req.body.productPrice,
description: req.body.productDescription,
website: req.body.website,
imageURL: "https://mybucket.s3-us-west-2.amazonaws.com/" + '???'
});
product.save(function (err) {
if (err) {
console.log(err)
return next(err);
}
res.redirect("/list-product");
});
}
使用这个上传我的图片:
// uploadController.js
const aws = require("aws-sdk");
const multer = require("multer");
const multerS3 = require("multer-s3");
require("dotenv").config();
aws.config.update({
secretAccessKey: process.env.SECRETACCESSKEY,
accessKeyId: process.env.ACCESSKEYID,
region: "us-west-2",
});
const s3 = new aws.S3();
const fileFilter = (req, file, cb) => {
if (file.mimetype === "image/jpeg" || file.mimetype === "image/png") {
cb(null, true);
} else {
cb(new Error("Invalid format, only JPG and PNG"), false);
}
};
const upload = multer({
fileFilter: fileFilter,
storage: multerS3({
s3: s3,
bucket: "mybucket",
acl: "public-read",
metadata: function (req, file, cb) {
cb(null, { fieldName: file.fieldname });
},
key: function (req, file, cb) {
console.log(file);
cb(null, Date.now().toString());
},
}),
});
module.exports = upload;
还有我的路线:
// routes.js
let upload = require('../controllers/uploadController')
const singleUpload = upload.single("image");
// post list product page
router.post('/list-product', singleUpload, listController.list__post)
【问题讨论】:
标签: node.js mongodb amazon-web-services amazon-s3 mongoose