Node.js 图像上载到cloudinary两次

Node.js 图像上载到cloudinary两次,node.js,image,express,multer,cloudinary,Node.js,Image,Express,Multer,Cloudinary,我尝试将AOD图像上传到cloudinary,但当我上传一个图像时,它会上传两次到cloudinary,当我上传2个图像时,它会上传4个等,并返回uploadedFiles=[]。那么我的代码有什么问题 我使用multercloudinary包和multer作为中间件 徖 app.post("/multiple-upload", multerMiddleware.array("files"), async (req, res) => { try {

我尝试将AOD图像上传到cloudinary,但当我上传一个图像时,它会上传两次到cloudinary,当我上传2个图像时,它会上传4个等,并返回uploadedFiles=[]。那么我的代码有什么问题

我使用multercloudinary包和multer作为中间件 徖

app.post("/multiple-upload", multerMiddleware.array("files"), async (req, res) => {
try {
if (!req.files) {
return res.status(200).json({ message: "Invalid file type" });
}
let uploadedFiles = imageUploaderHandler({ files: req.files });
return res.status(200).json({ message: "File stored", uploadedFiles });
} catch (error) {
console.log(error);
return res
.status(500)
.json({ message: "Something went wrong while uplaoding this item" });
}
})

const imageUploaderHandler = async ({ files }) => {
let file = {};
let uploadedFiles = [];
let newImages = files.map(async (item) => {
let result = await cloudinary.v2.uploader.upload(item.path)
console.log(result);
file.cloudinaryPublicId = result.public_id;
file.fileUrl = result.secure_url;
file.fileName = result.original_filename;
uploadedFiles.push(file);

});
return await Promise.all(newImages);
};


//Multer-cloudinary config

import cloudinary from "cloudinary";
import { CloudinaryStorage } from "multer-storage-cloudinary";

cloudinary.v2.config({
  cloud_name: CLOUD_NAME,
  api_key: API_KEY,
  api_secret: API_SECRET,
});
let cloudinaryVersion = cloudinary.v2;

const fileStorage = new CloudinaryStorage({
  cloudinary: cloudinaryVersion,
  folder: "uploads",
  filename: (req, file, cb) => {
    const date = format(new Date(), "dd-MM-yy");
    const fileType = file.mimetype == "video/mp4" ? "VIDEO" : "IMAGE";
    const fileNameFormat = `${date}-${fileType}-${file.originalname}`;
    cb(null, fileNameFormat);
  },
});

const fileFilter = (req, file, cb) => {
  if (!file.originalname.match(/\.(jpg|jpeg|gif|png|mp4)$/i)) {
    cb(null, false);
  } else {
    cb(null, true);
  }
};
export const multerMiddleware = multer({
  storage: fileStorage,
  fileFilter,
});


您的编码方法不干净,有很多错误,您可以使用
q
async
模块解决您的问题,如下所示:

let async = require('async');
let q = require('q');
const imageUploaderHandler = async ({ files }) => {
  let defer = q.defer(); // define a defer
  let file = {};
  let uploadedFiles = [];
  async.eachSeries(files, async (item)=>{ //it is a loop 
   try {
    let result = await cloudinary.v2.uploader.upload(item.path)
    console.log(result);
    file.cloudinaryPublicId = result.public_id;
    file.fileUrl = result.secure_url;
    file.fileName = result.original_filename;
    uploadedFiles.push(file);
   } catch (error) {
     console.log("something is wrong : ", error)
   } 
  },()=>{
    defer.resolve(uploadedFiles) //its callback when finished loop,do something, we want return result as a promise
  })
  return defer.promise; // this function returns promise
  };
因为使用了
q
,所以此函数返回
promise
,就像在路线中一样:

let uploadedFiles = await imageUploaderHandler({ files: req.files });//use await

检查文档和文档

如果您的问题没有解决,请留下评论是的,同样的问题也会发生,没有更改将multerMiddleware添加到问题中我在app.post的第一个(“/multiple upload”)中将multer中间件添加到问题显示控制台.log(req.files)