当前位置: 首页 > 知识库问答 >
问题:

图像上传cloudinary在heroku不工作

翟奇逸
2023-03-14

我在Node.js应用程序中使用multer和cloudinary上传图像。当我处于开发模式时,它工作得非常好,但在部署到heroku后,我在浏览器控制台中得到错误,因为服务器响应的状态是503(服务不可用)。当我检查heroku日志时,它显示为at=error code=h12desc=“request timeout”method=post path=“/api/users/upload/avatar”,我已经在heroku中添加了环境变量。会有什么问题?

我的配置文件

const {config,uploader } = require('cloudinary').v2

const cloudinaryConfig = (req,res,next) => {
  config({
  cloud_name: process.env.CLOUD_NAME,
  api_key: process.env.API_KEY,
  api_secret: process.env.API_SECRET,
  });
  next()
}
  module.exports ={cloudinaryConfig,uploader}

Multer文件

const DatauriParser = require('datauri/parser');

const parser = new DatauriParser();

const storage = multer.memoryStorage();
const multerUploads = multer({ storage,fileFilter:(req,file,cb)=>{
  let ext = path.extname(file.originalname);
  if (ext !== ".jpg" && ext !== ".jpeg" && ext !== ".png") {
  cb(new Error("File type is not supported"), false);
  return;
  } cb(null,true)
} }).single('image');

const dataUri = req => parser.format(path.extname(req.file.originalname).toString(),req.file.buffer)


module.exports = {multerUploads,dataUri}

我的上载控制器

const uploadImage = async(req,res)=>{
    const folder = req.path.split('/',3)[2]
    if(!req.file){
        throw new Error('Choose a picture to upload')
    }
     if(req.file){
         const file = dataUri(req).content
         const result = await uploader.upload(file,{
             folder:`MobiHub/${folder}`,
             width: 300,
             height:300,
             crop:'fill',
             gravity: "faces"
         })
         const image = result.secure_url
         res.json({image}) 
     }  
   
}

共有1个答案

宗政学
2023-03-14

在Heroku配置变量上设置Cloudinary环境变量(例如process.env.cloud_name)可能会有所帮助。或者简单地添加cloudinary_url环境变量(可以在Cloudinary仪表板上找到),那么您就不需要在Cloudinary.config()上显式声明它们。

 类似资料: