Javascript 如何将UTF-8或Base64数据写入Phonegap中本地存储(SD卡)上的文件(jpg/doc/pdf)

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

我从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或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); }