我正在将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
})
});
最佳答案
因此,事实证明我传递的源数据格式不正确。我可以将它作为已经格式化的数据URI从ImagePicker插件中传入(ImagePicker示例提供了两种捕获源文件的方式,而我使用的是错误的方式)。我能够摆脱CryptoJS的东西,只需传递file: source.uri
关于javascript - 上载到Cloudinary API-无效的文件参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40052606/