Javascript 如何将UTF-8或Base64数据写入Phonegap中本地存储(SD卡)上的文件(jpg/doc/pdf)
我从API中得到了类似var byteArr=[12,-123,43,99,…]的字节数组, 然后我将它转换成UTF-8字符串Javascript 如何将UTF-8或Base64数据写入Phonegap中本地存储(SD卡)上的文件(jpg/doc/pdf),javascript,cordova,fileapi,Javascript,Cordova,Fileapi,我从API中得到了类似var byteArr=[12,-123,43,99,…]的字节数组, 然后我将它转换成UTF-8字符串 var utf8_str = String.fromCharCode.apply([], new Uint8Array(byteArr)); 然后将UTF-8字符串转换为Base64字符串 var base64_str= window.btoa(utf8_str); 现在我正在通过Phonegap中的FileWriter将UTF-8或Base6
var utf8_str = String.fromCharCode.apply([], new Uint8Array(byteArr));
然后将UTF-8字符串转换为Base64字符串
var base64_str= window.btoa(utf8_str);
现在我正在通过Phonegap中的FileWriter将UTF-8或Base64字符串写入文件(xyz.pdf/xyz.jpg),但打开时会显示空白文件
function gotWriteFile(dirEntry) {
dirEntry.getFile(FILE_NAME, {create: true, exclusive: false}, gotFileWriteEntry, failWrite);
}
function gotFileWriteEntry(fileEntry) {
fileEntry.createWriter(gotFileWriter, failWrite);
}
function gotFileWriter(writer) {
writer.onwriteend = function(evt) {
console.log("File write successfully....");
hideModal();
};
writer.write(utf8_str);
//writer.write(base64_str);
}
什么是解决方案 试试这个(确保你得到了正确的utf8\u str):
我在另一个项目中遇到了问题,
btoa
没有进行正确的转换,因此我最终在我的项目中使用来解码Base64响应
我注意到,与服务器上的文件相比,我在手机上传输的文件更大
也许你也是这样?我找到了在Phonegap中按字节创建文件数组的解决方案 在phonegap中,Android和iOS支持将文本和二进制数据写入文件。所以我将字节数组转换成二进制数组,然后由FileWriter写入
var byteArr=[12,-123,43,99, ...] ;
var UTF8_STR = new Uint8Array(byteArr); // Convert to UTF-8...
var BINARY_ARR=UTF8_STR.buffer; // Convert to buffer...
然后将“BINARY_ARR”传递给FileWriter以写入文件
function gotFileWriter(writer) {
writer.onwriteend = function(evt) {
console.log("File write successfully....");
};
writer.write(BINARY_ARR);
}
祝你今天愉快……) 我从phonegap文档中尝试了这个示例,但没有用@Vickyare你是否正确获取utf8_str?当我通过“btoa”获取数据时,浏览器中会显示图像/pdf,但当通过文件编写器在移动设备中保存时,它会显示空白文件。当你说空白文件时,是指文件大小0还是其他什么?我试图将png文件保存到base64字符串中的文件系统中。你能帮我解决这个问题吗?还是你仍然面临这个问题@Vijari仍然面临着一个问题,我是javascript新手,所以您能告诉我如何使用base64字符串而不是像您使用@Saurabhwould那样的字节数组来应用您的soln吗?我必须使用atob吗?试试下面的代码../**Convert Base64->Binary->Blob->write to file*/function dataFile(bs64data){var Binary=atob(bs64data.split(',')[1]);//atob()解码Base64数据..var数组=[];for(var i=0;i
function gotFileWriter(writer) {
writer.onwriteend = function(evt) {
console.log("File write successfully....");
};
writer.write(BINARY_ARR);
}