我有一个快递服务器,它通过“ / products”路径接受表单。该表单具有多个文本元素和一个图像元素。最终目标是从传入请求中提取图像,将其上载到AWS S3,然后将该图像的位置+其他文本传输到MySql数据库。我目前一直在使用Postman发送请求
目前,Multer将一个很长的纯文本文件存储在我的“ temp /”文件中,然后将其删除。当我在AWS上查看时,该图像不存在,并且有一个“八位位组流”正在重新记录。有什么想法吗?
我一直在使用本教程(以及无数其他资源)来尝试实现我期望的目标,如果有帮助的话:https://medium.com/@otoloye/uploading-files-to-aws-s3-using-nodejs-multer-mongodb-and-postman-part-1-de790b8131d4
productcontroller.js
const createProduct = (req, res) => {
const fs = require('fs');
const aws = require('aws-sdk');
const pool = require('../../lib/db');
const moment = require('moment');
aws.config.setPromisesDependency();
aws.config.update({
accessKeyId: process.env.ACCESS_KEY_ID,
secretAccessKey: process.env.SECRET_ACCESS_KEY,
region: process.env.REGION
});
const s3 = new aws.S3();
console.log(req)
const params = {
ACL: 'public-read',
Bucket: process.env.BUCKET_NAME,
Body: fs.createReadStream(req.file.path),
Key: `products/${Date.now()}`
};
s3.upload(params, (err, data) => {
if (err) {
console.log('An error occured whilst uploading the picture',err)
};
if (data){
fs.unlinkSync(req.body.mainImage);
const locationUrl = data.Location;
pool.query(`INSERT INTO products (productName,tagLine,productDescript,category,subCategory,pricePerUnit,minOrder,maxOrder,leadTime,sellerId,sellerName,mainImage,createdOn)
VALUES(
${req.body.productName},
${req.body.tagLine},
${req.body.productDescript},
${req.body.category},
${req.body.subCategory},
${req.body.pricePerUnit},
${req.body.minOrder},
${req.body.maxOrder},
${req.body.leadTime},
${req.body.sellerId},
${req.body.sellerName},
${locationUrl},
${moment(Date.now()).format('YYYY-MM-DD HH:mm:ss')}
)`, (req, res, next) => {
if (err){
console.log('error when trying to connect to database', err)
} else {
console.log(res);
}
}
)
}
});
};
module.exports = {createProduct}
products.js
const express = require('express');
const productsRouter = express.Router();
const multer = require('multer');
const upload = multer({ dest: 'temp/'})
const { createProduct } = require('../controllers/productController');
productsRouter.post('/', upload.single('mainImage'), createProduct);
module.exports = productsRouter;
[...],但我无法获取文件路径显示在我的params对象的主体中,以便可以将其传输到AWS。
文件路径实际上不会包含在req.body
中。 Multer添加带有该信息的req.file
对象:
const createProduct = (req, res) => {
var filePath = req.file.path;
// [...]
}