问题描述
我可以将图像上传到我的 s3 存储桶,但无法将相应的文件 url 传递到我的 MongoDB 数据库。我能做的最好的事情是使用预定义的字符串名称更新我的图像字段。具体来说,我想更改 'TestURL.png' 以匹配正在我的路由 'Date.Now().toString() + '-' + file.originalname)' 中保存的文件的名称,但一直无法这样做.
注意,当我尝试访问“req.file”时,对象返回空。另外,如果我的代码看起来与其他 multer-s3 教程不同,那是因为除了下面使用的内容之外,我找不到任何可以工作的代码。
uploadController.js
import asyncHandler from 'express-async-handler';
import Recipe from '../models/recipeModel.js';
// @description Upload
// @route PUT /api/uploadAWS/:id
// @access Private
const uploadRecipeCoverImage = asyncHandler(async (req,res) => {
const {
recipe_cover_image,} = req.body
const uid = req.params.id
const recipe = await Recipe.findById(uid)
const uploadImage = { recipe_cover_image: 'TestURL.png' }
Recipe.findByIdAndUpdate(uid,uploadImage,{ new: true })
.then((recipe) => res.status(200).json({success:true,recipe:recipe}))
.catch((recipe) => res.status(400).json({success:false,error:err}))
export {
uploadRecipeCoverImage
}
上传AWSRoutes.js
import express from 'express';
import aws from 'aws-sdk';
import multer from 'multer';
import multerS3 from 'multer-s3';
import path from 'path';
import {
uploadRecipeCoverImage,} from '../controllers/uploadController.js';
import { protect,admin } from '../middleware/authMiddleware.js';
const router = express.Router();
aws.config.update({
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,accessKeyId: process.env.AWS_ACCESS_KEY_ID,region: 'us-west-2',signatureversion: 'v4'
})
const s3 = new aws.S3()
function checkFileType(file,cb) {
const filetypes = /jpg|jpeg|png/
const extname = filetypes.test(path.extname(file.originalname).toLowerCase())
const mimetype = filetypes.test(file.mimetype)
if(extname && mimetype) {
return cb(null,true)
} else {
cb('Images only!')
}
}
const upload = multer({
limits: { fileSize: 2000000 },fileFilter: function(req,file,cb) {
checkFileType(file,cb)
},storage: multerS3({
s3: s3,bucket: 'recipebook-recipe-cover-images',acl: "public-read",Metadata: function (req,cb) {
cb(null,{ fieldName: file.fieldname });
},key: function (req,Date.Now().toString() + '-' + file.originalname);
},}),})
const singleUpload = upload.any()
router.route('/:id')
.put(singleUpload,protect,uploadRecipeCoverImage)
recipeModel.js(如果从上面看不清楚)
import mongoose from 'mongoose';
const recipeSchema = mongoose.Schema(
{
...
recipe_cover_image: {
type: String,required: true
},)
const Recipe = mongoose.model('Recipe',recipeSchema);
export default Recipe;
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)