You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Express.js上传图片至Cloudinary时出错,请求技术协助

Express.js 上传图片至 Cloudinary 故障排查请求

错误信息

输入图片描述

我在使用Express.js将图片上传至Cloudinary时遇到问题,已查看平台同类问题但无解决方案生效,恳请协助排查。


Cloudinary 配置代码

const cloudinary = require('cloudinary').v2
const dotenv = require('dotenv')

dotenv.config()

cloudinary.config({
  cloud_name: process.env.CLOUDINARY_NAME,
  api_key: process.env.CLOUDINARY_API_KEY,
  api_secret: process.env.CLOUDINARY_API_SECRET
})

exports.uploads = async (file, folder) => {
  // eslint-disable-next-line no-useless-catch
  try {
    const result = await cloudinary.uploader.upload(file, {
      use_filename: true,
      folder
    })

    return {
      url: result.url,
      id: result.public_id
    }
  } catch (error) {
    throw error
  }
}

multer.js

const multer = require('multer')
const fs = require('fs')

const UPLOADS_DIR = './uploads'

if (!fs.existsSync(UPLOADS_DIR)) {
  fs.mkdirSync(UPLOADS_DIR)
}

const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, UPLOADS_DIR)
  },
  filename: (req, file, cb) => {
    const timestamp = new Date().toISOString().replace(/:/g, '-')
    const originalname = file.originalname || 'unknown'
    cb(null, `${timestamp}-${originalname}`)
  }
})

const fileFilter = (req, file, cb) => {
  if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png') {
    cb(null, true)
  } else {
    // reject file
    cb({ message: 'Unsupported file format' }, false)
  }
}

const upload = multer({
  storage,
  limits: { fileSize: 1024 * 1024 },
  fileFilter
})

module.exports = upload

ProductController.js(上传图片并将链接存入数据库)

const createProduct = async (req, res) => {
  const { name, price, description } = req.body

  console.log('Received request with data:', { name, price, description })

  const uploader = async (path) => await cloudinary.uploads(path, 'Images')

  try {
    if (req.method === 'POST') {
      const urls = []
      const files = req.files
      for (const file of files) {
        const { path } = file
        const newPath = await uploader(path)
        urls.push(newPath)
        fs.unlinkSync(path)
      }

      console.log('Cloudinary Upload URLs:', urls)
      // creating the product
      const product = await new Product({
        name,
        description,
        price,
        files: urls
      })

      await product.save()
      return res.status(200).json({
        success: true,
        message: 'product created sucessfully',
        data: product
      })
    } else {
      return res.status(405).json({
        err: `${req.method} method not allowed`
      })
    }
  } catch (error) {
    console.error('Error creating product:', error)
    return res.status(412).send({
      success: false,
      message: error.message
    })
  }
}

内容的提问来源于stack exchange,提问作者Jamal Fakhriddinov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 08:05:17