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

busg9geu  于 2022-10-22  发布在  Java
关注(0)|答案(2)|浏览(385)

我正在将Cloudinary与我的React Native应用程序集成,当我使用CloudinaryAPI上传时遇到了一个问题。我使用React Native Image Picker从相机卷中选择一个图像,并使用它获得一个源uri-示例如下。
我正在从Cloudinary收到一个错误响应,我不确定它指的是什么。"Invalid file parameter. Make sure your file parameter does not include '[]'"
当我使用调试器时,我可以控制台注销我在请求正文中发送的所有参数。任何建议都将不胜感激!
source.uri: /Users/IRL/Library/Developer/CoreSimulator/Devices/817C678B-7028-4C1C-95FF-E6445FDB2474/data/Containers/Data/Application/BF57AD7E-CA2A-460F-8BBD-2DA6846F5136/Documents/A2F21A21-D08C-4D60-B005-67E65A966E62.jpg

async postToCloudinary(source) {
let timestamp = (Date.now() / 1000 | 0).toString();
let api_key = ENV.cloudinary.api;
let api_secret = ENV.cloudinary.api_secret
let cloud = ENV.cloudinary.cloud_name;
let hash_string = 'timestamp=' + timestamp + api_secret
let signature = CryptoJS.SHA1(hash_string).toString();
let upload_url = 'https://api.cloudinary.com/v1_1/' + cloud + '/image/upload'

try {
  let response = await fetch(upload_url, {
    method: 'POST',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      file: {
        uri: source.uri,
        type: 'image/jpeg'
      },
      api_key: api_key,
      timestamp: timestamp,
      signature: signature
    })
  });

  let res = await response.json();
  console.log(res);
} catch(error) {
  console.log("Error: ", error);
}

}

更新所以我想我现在可以使用base64编码了,但我仍然会遇到同样的错误。

var wordArray = CryptoJS.enc.Utf8.parse(source.uri);
var file = CryptoJS.enc.Base64.stringify(wordArray);

try {
  let response = await fetch(upload_url, {
    method: 'POST',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      file: {
        uri: file,
        type: 'image/jpeg;base64'
      },
      api_key: api_key,
      timestamp: timestamp,
      signature: signature
    })
  });
abithluo

abithluo1#

因此,我传递的源数据格式不正确。我能够从我使用的ImagePicker插件中传递它作为一个已格式化的数据URI(ImagePicker示例提供了两种方法来捕获源文件,但我使用了错误的方法)。我能够摆脱CryptoJS的东西,只需传入file: source.uri

nnsrf1az

nnsrf1az2#

如果使用***axios***,请确保在请求头中包含{'X-Requested-With': 'XMLHttpRequest'}。如。

const uploadAgent = axios.create({
  baseURL: 'https://api.cloudinary.com',
  headers: {
    'X-Requested-With': 'XMLHttpRequest'
  }
});

相关问题