【发布时间】:2020-05-18 01:33:02
【问题描述】:
这是我的第一篇 Stack Overflow 帖子,所以请放轻松!
我正在使用 EXPO 作为带有 React Native 的 SDK 构建一个录音应用程序。该应用程序的主要功能之一是能够录制实时音频以及从客户端设备上传音频。通过利用 Expo 的音频 API 和文件系统,我能够成功地录制和保存实时音频,然后通过文件系统检索它以上传,但是当我尝试将 localUri 上传到我的 Cloudinary 数据库时,我运行错误。关于音频的文档很少,上传到 cloudinary 的音频和视频上传都集中在视频上传中,因此没有任何特定的音频可以真正为我指明正确的方向。我尝试将 URI 转换为 base64 以及各种 MIME 类型,但来自 Cloudinary 的带有安全 url 的响应返回空/未定义。我已经用这种方法成功上传了图片,所以你可以想象它是多么令人沮丧。这是我抓取录音并尝试将其上传到 Cloudinary 的代码:
DocumentPicker.getDocumentAsync({
type: '*/*',
copyToCacheDirectory: true,
base64: true
})
.then(succ => {
//check out the saved info
console.log(succ, `path: ${succ.uri}, type: ${succ.type}, name: ${succ.id}, size: ${succ.size}`)
let Base64 = {/* Truncated Base64 object*/};
let base64Aud = `data:audio/x-wav;base64, ${Base64.encode(succ.uri)}`;
let cloud = `https://api.cloudinary.com/v1_1/${CLOUD_NAME}/upload`;
const data = {
'file': base64Aud,
'upload_preset': CLOUDINARY_UPLOAD_PRESET,
'resource_type': 'video',
}
fetch(cloud, {
body: JSON.stringify(data),
headers: {
'content-type': 'application/x-www-form-urlencoded'
},
method: 'POST',
})
.then(async r => {
let data = await r.json()
console.log('cloudinary url:', data.secure_url)
return data.secure_url
})
.catch(err => console.log(err))
}
此调用将以下内容打印到控制台:
Object {
"name": "20200117_143416.mp4",
"size": 519612343,
"type": "success",
"uri": "file:///data/user/0/host.exp.exponent/cache/ExperienceData/%2540anonymous%252Faloud-aaf24bff-8000-47f0-9d1c-0893b81c3cbc/DocumentPicker/c922deb7-fd4f-42d9-9c28-d4f1b4990a4c.mp4",
} path: file:///data/user/0/host.exp.exponent/cache/ExperienceData/%2540anonymous%252Faloud-aaf24bff-8000-47f0-9d1c-0893b81c3cbc/DocumentPicker/c922deb7-fd4f-42d9-9c28-d4f1b4990a4c.mp4, type: success, name: undefined, size: 519612343
data:audio/x-wav;base64, ZmlsZTovLy9kYXRhL3VzZXIvMC9ob3N0LmV4cC5leHBvbmVudC9jYWNoZS9FeHBlcmllbmNlRGF0YS8lMjU0MGFub255bW91cyUyNTJGYWxvdWQtYWFmMjRiZmYtODAwMC00N2YwLTlkMWMtMDg5M2I4MWMzY2JjL0RvY3VtZW50UGlja2VyL2M5MjJkZWI3LWZkNGYtNDJkOS05YzI4LWQ0ZjFiNDk5MGE0Yy5tcDQ=
cloudinary url: undefined
有没有人看到任何明显的问题或对此问题有任何见解?更好的是,使用 Expo 和 React Native 从客户端成功将音频上传到 Cloudinary?谢谢!
【问题讨论】:
-
能否分享 Cloudinary 返回的
err的输出? -
我已经添加了额外上下文的输出,对此感到抱歉!
标签: android react-native audio expo cloudinary