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
相关产品推荐
相关产品推荐

