You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Expo Filesystem将视频转base64并上传到Cloudinary

代码问题修复方案

你代码中存在3个核心错误:

  • 未给异步方法 FileSystem.readAsStringAsync 添加await关键字,直接拼接会拿到Promise对象而非base64结果
  • 方法参数语法错误,uri和配置对象之间缺少逗号分隔
  • fetch提交POST请求时直接传入普通对象作为body,未按Cloudinary要求使用FormData格式,且未设置对应请求头

修复后可运行代码

let pickerResult = await ImagePicker.launchImageLibraryAsync({
    allowsEditing: true,
    aspect: [4, 3], 
    mediaTypes: ImagePicker.MediaTypeOptions.Videos, 
});

if (pickerResult.cancelled === true) { 
    return; 
} 

// 新增await关键字,修正参数分隔语法
const videoBase64 = await FileSystem.readAsStringAsync(pickerResult.uri, {encoding: 'base64'});
const base64Url = `data:video/mp4;base64,${videoBase64}`;

// 用FormData封装上传参数
let formData = new FormData();
formData.append("file", base64Url);
formData.append("upload_preset", "******");

const r = await fetch(CLOUDINARY_URL, { 
    body: formData,
    method: 'POST',
    headers: {
        'Content-Type': 'multipart/form-data',
    },
}) 
const datal = await r.json()
setVideo(datal.secure_url);

额外优化提示

  • 视频文件通常体积较大,转base64会额外增加33%左右的体积,建议直接上传二进制流而非base64格式,可大幅提升上传速度
  • ImagePicker的base64参数仅对图片资源生效,选择视频时无需配置该参数

内容的提问来源于stack exchange,提问作者zeke1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:54:03