我在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})
}
}
在Heroku配置变量上设置Cloudinary环境变量(例如process.env.cloud_name
)可能会有所帮助。或者简单地添加cloudinary_url
环境变量(可以在Cloudinary仪表板上找到),那么您就不需要在Cloudinary.config()
上显式声明它们。
我的视图中有一个用于上传图像的输入字段: 我已经在我的公共文件夹中创建了文件夹上传,在我的控制器中,我试图上传这样的文件: 当我提交表单并上传图片时,没有任何东西被上传到文件夹上传,我得到了错误: SQLSTATE[HY000]:一般错误:1364字段“image”没有默认值
我有以下代码: 美元这个- 没有出现警告/错误,提交成功,但我上传的图像不会显示在文件夹中/uploads/user/“我不知道为什么,我不知道如何检查我的上传路径是否正确。我希望有一些方向。但我确实用相同的代码从不同的函数上传了它的工作和图像显示。 我目前使用localhost。 表格如下:
Peer.JS server.js github链接到项目:链接 新来的赫罗库。任何帮助都将不胜感激!
图像的html代码 heroku bash显示Howling.jpg