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

Sau*_*abh 7 javascript fileapi cordova

我从API获取字节数组,如var byteArr = [12,-123,43,99,...],然后我将其转换为UTF-8字符串

     var utf8_str = String.fromCharCode.apply([], new Uint8Array(byteArr));
Run Code Online (Sandbox Code Playgroud)

然后将UTF-8字符串转换为Base64字符串

      var base64_str= window.btoa(utf8_str);
Run Code Online (Sandbox Code Playgroud)

现在我在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);
 }
Run Code Online (Sandbox Code Playgroud)

什么是解决方案的家伙......?

Sau*_*abh 10

我找到了在Phonegap中按字节数组创建文件的解决方案.

在phonegap中,Android和iOS支持文本和二进制数据写入文件.所以我将BYTE数组转换为BINARY数组,然后由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...    
Run Code Online (Sandbox Code Playgroud)

然后将'BINARY_ARR'传递给FileWriter以写入文件.

 function gotFileWriter(writer) {
     writer.onwriteend = function(evt) {
     console.log("File write successfully....");        
   };
   writer.write(BINARY_ARR);   
 }
Run Code Online (Sandbox Code Playgroud)

祝你今天愉快.. :)

  • 试试这个代码../**转换Base64 - > Binary - > Blob - >写入文件*/function dataFile(bs64data){var binary = atob(bs64data.split(',')[1]); // atob()解码base64数据.. var array = []; for(var i = 0; i <binary.length; i ++){array.push(binary.charCodeAt(i)); //转换为二进制..} var file = new Blob([new Uint8Array(array)],{type:'image/jpeg'}); //创建blob文件..} (3认同)