Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正在上载到Cloudinary API-文件参数无效_Javascript_Ios_React Native_Async Await_Cloudinary - Fatal编程技术网

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

Javascript 正在上载到Cloudinary API-文件参数无效,javascript,ios,react-native,async-await,cloudinary,Javascript,Ios,React Native,Async Await,Cloudinary,我正在将Cloudinary与我的React本机应用程序集成,在使用Cloudinary API进行上传时遇到了问题。我正在使用从相机卷中选择一个图像,并使用它获得一个源uri——下面的示例 我从Cloudinary收到一个错误响应,我不确定它指的是什么“无效的文件参数。请确保您的文件参数不包括“[]”“ 当我使用调试器时,我可以通过控制台注销我在请求主体中发送的所有参数。任何建议都将不胜感激 source.uri:/Users/IRL/Library/Developer/CoreSimulat

我正在将Cloudinary与我的React本机应用程序集成,在使用Cloudinary API进行上传时遇到了问题。我正在使用从相机卷中选择一个图像,并使用它获得一个源uri——下面的示例

我从Cloudinary收到一个错误响应,我不确定它指的是什么<代码>“无效的文件参数。请确保您的文件参数不包括“[]”“

当我使用调试器时,我可以通过控制台注销我在请求主体中发送的所有参数。任何建议都将不胜感激

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
    })
  });

结果证明我传递的源数据格式不正确。我可以通过ImagePicker插件将其作为已格式化的数据URI传递(ImagePicker示例提供了两种捕获源文件的方法,但我使用了错误的方法)。我能够摆脱CryptoJS的东西,只需传入
文件:source.uri

您是否尝试过从图像中获取base64,然后将其发送到Cloudinary?抱歉,我不太确定这意味着什么。。。我该怎么做?你的意思是我应该用CryptoJS将图像uri编码成base64,然后发送到Cloudinary吗?是的,我在文档中肯定错过了这个。。。source.uri应该是base64编码的。但是,现在得到一个新错误,它不喜欢我的编码URL。“不支持的源URL”