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

Cloudinary图片上传成功但Node端触发catch错误求助

问题根源

Cloudinary Node SDK 的 upload_stream 回调函数参数顺序被写反了,正确顺序是**(error, result)**,而非你代码中的(result, error)。这导致上传成功时,你误将成功结果当作错误抛出,后端进入catch块返回500状态码,前端因此收到错误响应,而错误内容实际是Cloudinary的成功返回结果。

修复步骤

1. 修正后端streamUpload函数的回调参数顺序

修改 cloudinary.uploader.upload_stream 的回调逻辑,先判断错误,再处理结果:

let streamUpload = (req) => {
    return new Promise((resolve, reject) => {
        if (!req.file || !req.file.buffer) {
            return reject(new Error("No file provided or buffer is empty"));
        }

        // 修正回调参数顺序为(error, result)
        let stream = cloudinary.uploader.upload_stream(
            (error, result) => {
                if (error) {
                    console.error('Error al subir la imagen a Cloudinary:', error);
                    reject(error);
                } else {
                    console.log("Result: ", result);
                    console.log('Imagen subida a Cloudinary');
                    resolve(result);
                }
            }
        );

        console.log('Subiendo imagen a Cloudinary...');
        streamifier.createReadStream(req.file.buffer).pipe(stream);
    });
};

2. 前端axios请求优化(可选但推荐)

手动设置 Content-Type: multipart/form-data 会丢失自动生成的boundary分隔符,虽然当前后端能解析文件,但这是潜在问题。移除手动设置的headers,让axios自动处理:

await axios.post(`${VITE_PICTURES_API_HOST}/subirFoto`, formData);
验证修复

修改后重新测试:

  • 后端会在Cloudinary上传成功后返回200状态码和预期的响应内容
  • 前端axios请求会进入then块而非catch块,正常接收成功结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:43:16