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

“path”参数的类型必须为string或Buffer或URL cloudinary和nodejs的实例

徐麒
2023-03-14

我试图创建一种方法,客户端可以上传图像从前端到后端服务器,然后将图像存储到Cloud dinary,但我最终得到了这个错误:

TypeError[ERR_INVALID_ARG_TYPE]:路径参数必须是字符串类型或Buffer或URL的实例。收到未定义

这是我的后端代码库:

const express = require("express");
const router = express.Router();
const { catchErrors } = require("../errors/errorHandlers");
const { body } = require("express-validator");
const multer = require('multer');
const cloudinary = require('cloudinary').v2;
const streamifier = require('streamifier');
const storage = multer.memoryStorage();
const fileUpload = multer({ storage: storage });
const fs = require('fs'); 

cloudinary.config({
  cloud_name: "xxx",
  api_key: "xxxx",
  api_secret: "xxxx",
});

这是我从控制台得到的

Images  {
  file: {
    name: 'me.jpg',
    data: <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 f0 00 f0 00 00 ff e1 03 78 45 78 69 66 00 00 4d 4d 00 2a 00 00 00 08 00 09 01 0f 00 02 00 00 00 06 00 00 ... 442191 more bytes>,
    size: 442241,
    encoding: '7bit',
    tempFilePath: '',
    truncated: false,
    mimetype: 'image/jpeg',
    md5: 'a01832d1a390b2bcd7e2b6103d68eaa4',
    mv: [Function: mv]
  }
}

{ message: 'Request Timeout', http_code: 499, name: 'TimeoutError' }

我如何解决这个问题?

共有2个答案

黄景胜
2023-03-14

您是否可能错过了dataUri函数,该函数将格式化缓冲区以字符串形式返回?请参见资源:https://medium.com/@joeokpus/上传图像到云计算使用多特尔和高速公路js-f0b9a4e14c54

让我知道这是否有帮助。

马欣荣
2023-03-14

我也有同样的错误。以下是你如何解决它:

npm安装数据URI

const DatauriParser=require("datauri/parser");
const parser = new DatauriParser();

由于使用multer解析表单并将其存储在内存中:

  console.log("req.file object",req.file)
  const extName = path.extname(req.file.originalname).toString();
  const file64 = parser.format(extName, req.file.buffer);

file64是一个DataUri对象。我们不能直接通过

const result = await Cloudinary.upload(file64.content!);
console.log("result of Cloudinary upload",result")

这个结果对象具有secure_url属性,这是到文件的安全https链接。

 类似资料: