“路径”参数必须是字符串类型或 Buffer 或 URL cloudinary 和 nodejs 的实例

Posted

技术标签:

【中文标题】“路径”参数必须是字符串类型或 Buffer 或 URL cloudinary 和 nodejs 的实例【英文标题】:The "path" argument must be of type string or an instance of Buffer or URL cloudinary and nodejs 【发布时间】:2021-06-24 03:06:01 【问题描述】:

我正在尝试创建一种方法,客户端可以将图像从前端上传到后端服务器,然后将图像存储到 cloudinary 但我最终收到此错误:

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' 

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

我有同样的错误。这里你如何解决它:

npm install datauri

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")

result 对象具有“secure_url”属性,这是指向该文件的安全 https 链接。

【讨论】:

【参考方案2】:

您是否可能缺少将格式化缓冲区以将其作为字符串返回的 dataUri 函数?见资源:https://medium.com/@joeokpus/uploading-images-to-cloudinary-using-multer-and-expressjs-f0b9a4e14c54

让我知道这是否有帮助。

【讨论】:

以上是关于“路径”参数必须是字符串类型或 Buffer 或 URL cloudinary 和 nodejs 的实例的主要内容,如果未能解决你的问题,请参考以下文章

"path" 参数必须是字符串类型或 Buffer 或 URL 的实例。收到未定义

fs.FileRead -> TypeError [ERR_INVALID_ARG_TYPE]:“路径”参数必须是字符串、缓冲区或 URL 类型之一。接收类型未定义

Electron-packager - “路径”参数必须是字符串类型。接收类型未定义

[REQ_RESOURCE_TYPE]:资源必须是字符串、Buffer或有效的文件流

“块”参数必须是字符串或缓冲区类型之一。接收到的类型对象

TypeError:获取参数数组的类型无效 numpy.ndarray,必须是字符串或张量。 (不能将 ndarray 转换为张量或操作。)