上传到 Cloudinary API - 文件参数无效
Posted
技术标签:
【中文标题】上传到 Cloudinary API - 文件参数无效【英文标题】:Uploading to Cloudinary API - Invalid file parameter 【发布时间】:2017-02-24 10:38:18 【问题描述】:我正在努力将 Cloudinary 与我的 React Native 应用程序集成,当我使用 Cloudinary API 上传时遇到了问题。我正在使用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
)
);
【问题讨论】:
你有没有试过从图片中获取base64然后发送到Cloudinary? 抱歉,我不太确定这意味着什么……我该怎么做?您的意思是我应该使用 CryptoJS 将图像 uri 编码为 base64,然后发送到 Cloudinary? 是的,我确实错过了文档中的内容... source.uri 应该是 base64 编码的。但是现在出现一个新错误,它不喜欢我的编码 URL。 “不支持的来源网址” 【参考方案1】:原来我传入的源数据格式不正确。我能够从我使用的 ImagePicker 插件中将其作为已格式化的数据 URI 传递(ImagePicker 示例提供了两种捕获源文件的方法,但我使用了错误的一种)。我能够摆脱 CryptoJS 的东西,只需传入 file: source.uri
【讨论】:
以上是关于上传到 Cloudinary API - 文件参数无效的主要内容,如果未能解决你的问题,请参考以下文章
如何在 jquery 中向 cloudinary 文件上传()添加可选参数?
如何使用 Rails-Api + Vue.js + Cloudinary + Attachinary 上传图片?
使用 jQuery 使用 Cloudinary API 直接上传图片