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

Cordova调用fileWriter.write()传入Blob参数写入失败如何解决?

问题原因

该问题属于cordova-plugin-file的已知适配缺陷,部分版本/平台下直接传入Blob类型参数时,插件会错误将Blob序列化为普通JSON对象,最终仅写入{}字符串到文件中。

解决方案

不要直接传入Blob,也不要将Blob转为字符串写入(二进制内容转文本会因编码规则丢失数据,必然导致文件损坏),正确做法是先将Blob转为ArrayBuffer后再调用write方法,完整可运行代码如下:

function writeBlobToFile(fileEntry, blob, callback) {
    fileEntry.createWriter(function (fileWriter) {
        fileWriter.onwriteend = function() {
            callback && callback(null, '写入成功');
        };
        fileWriter.onerror = function(e) {
            callback && callback(e);
        };
        // 将Blob转为ArrayBuffer写入,规避插件序列化bug
        const reader = new FileReader();
        reader.onloadend = function() {
            fileWriter.write(reader.result);
        };
        reader.readAsArrayBuffer(blob);
    });
}

// 调用示例
writeBlobToFile(someFileEntry, videoBlob, function(err, result) {
    if (err) {
        console.error('文件写入失败:', err);
        return;
    }
    console.log(result);
});
注意事项
  • 若上述方案仍不生效,优先将cordova-plugin-file升级到7.0及以上版本,旧版本存在大量二进制写入兼容问题
  • 安卓平台targetSdkVersion >=33时,需提前申请对应存储读写权限,否则也会出现写入异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:09:01