使用节点获取而不是请求将签名上传到 cloudinary

Signed upload to cloudinary with node-fetch instead of request

我能够使用节点 request module 通过 REST API 上传到 Cloudinary,如下所示:

 request.post({
  url: `https://api.cloudinary.com/v1_1/dennis/image/upload`,
  body: {
   file: `data:image/jpeg;base64,${req.body.toString('base64')}`,
   api_key: key,
   folder: 'dennis',
   timestamp: ts,
   signature: sig
  },
  json: true
 }, async (err, response, body) => {

  if (err) return console.error(err)

  res.send({
   'public_id': body.public_id,
   'secure_url': body.secure_url
  })
 })

我只使用 cloudinary 上传请求,否则我在整个应用程序中使用 node-fetch。我想使用 node-fetch 进行 cloudinary 上传,但应用与上面工作示例中相同的逻辑会导致神秘的错误消息:'Upload preset must be specified when using unsigned...'

我的节点获取请求如下所示:

 let response = await fetch(
  `https://api.cloudinary.com/v1_1/dennis/image/upload`,
  {
   method: 'post',
   body: {
    file: `data:image/jpeg;base64,${req.body.toString('base64')}`,
    api_key: key,
    folder: 'dennis',
    timestamp: ts,
    signature: sig
  }
 })

 if (response.status === 400) return console.error(response)

 let body = await response.json()

 res.send({
  'public_id': body.public_id,
  'secure_url': body.secure_url
 })

您是否考虑过使用我们的 Node SDK 来实现这一目标? 请查看文档以获取更多信息:https://cloudinary.com/documentation/node_integration

我知道这是一个旧的 post,但是您的获取正文需要在 JSON.stringify({file,api_key, ...})

我现在就这么用,谁需要额外的包:P

let response = await fetch(
  URL,
  {
   method: 'POST',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    },
   body:JSON.stringify({
    file,
    api_key,
    timestamp,
    public_id: "temp/image",
    signature
  })
 })