无法将音频文件上传到 Cloudinary API(使用 javascript)

Posted

技术标签:

【中文标题】无法将音频文件上传到 Cloudinary API(使用 javascript)【英文标题】:Unable to upload audio files to Cloudinary API (with javascript) 【发布时间】:2021-05-10 12:45:48 【问题描述】:

在我的 react 本机应用程序中,我实现了一个将图像上传到 Cloudinary 的功能,并且效果很好。但是现在我也需要上传音频文件,所以我重新调整了功能,但是,尽管将“resource_type”参数指定为“raw”(我也尝试使用“video”和“auto”),但我收到错误 [错误:无效图片文件]。

const CLOUDINARY_UPLOAD_URL = `https://api.cloudinary.com/v1_1/$CLOUD_NAME/image/upload`;

// takes base64 audio file as argument
export const uploadAudio = async (
    audio: string
  ): Promise<UploadImageResult> => 
    

    // function that requests  a signature to my API in order to load the resource 
    const 
      signature,
      timestamp,
      upload_preset,
     = await getCloudinarySignature();
  

    const formData = new FormData();
    formData.append("file", audio);
    formData.append("resource_type", "raw");
    formData.append("signature", signature);
    formData.append("timestamp", timestamp);
    formData.append("upload_preset", upload_preset);
    formData.append("api_key", API_KEY);
  

    const res = await fetch(CLOUDINARY_UPLOAD_URL, 
      method: "POST",
      body: formData,
    );
  
    const data = await res.json();
  
    if (!res.ok || !data.secure_url) throw new Error(data.error.message);
  
    return 
      url: data.secure_url,
      asset_id: data.asset_id,
      public_id: data.public_id,
    ;
  ;

有谁知道我做错了什么? 谢谢。

【问题讨论】:

【参考方案1】:

resource_type 是 Upload API 端点(在您的情况下为 CLOUDINARY_UPLOAD_URL)的一部分,而不是作为表单参数的一部分,并且由于您的 URL 始终使用 /image/upload,因此将被检查为 resource_type防止导致错误。

您可以做的是删除 resource_type 表单参数并根据文件类型在 URL 中设置适当的路径,例如/video/upload(用于视频和音频)或/raw/upload 用于其他文件类型,例如 txt、json 等。

或者,您可以将值设置为/auto/upload,您可以上传任何文件类型,而无需专门将其更改为“图像”、“视频”或“原始”。 'auto' 会将逻辑留给 Cloudinary 来确定正确的 resource_type 以使用每个资产。

【讨论】:

以上是关于无法将音频文件上传到 Cloudinary API(使用 javascript)的主要内容,如果未能解决你的问题,请参考以下文章

上传到 Cloudinary API - 文件参数无效

无法使用 Heroku 将图像上传到 Cloudinary

ExpressJS:TypeError:无法读取未定义的属性“路径”尝试将文件上传到 cloudinary 并将 url 保存到 mongoDB

如何使用 Rails-Api + Vue.js + Cloudinary + Attachinary 上传图片?

将具有特定public_id的图像上传到Cloudinary到特定文件夹(node.js)

如何将屏幕截图从 puppeteer 上传到 cloudinary 或 google bucket?