7

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

     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);
 }

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

4

3 回答 3

10

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

在 phonegap 中,Android 和 iOS 支持 Text 和 Binary 数据写入文件。所以我将 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...    

然后将“BINARY_ARR”传递给 FileWriter 以写入文件。

 function gotFileWriter(writer) {
     writer.onwriteend = function(evt) {
     console.log("File write successfully....");        
   };
   writer.write(BINARY_ARR);   
 }

祝你今天过得愉快.. :)

于 2013-11-01T07:29:56.983 回答
1

试试这个(确保你得到正确的 utf8_str):

var utf8_str = String.fromCharCode.apply([], new Uint8Array(byteArr));
var base64_str= window.btoa(utf8_str);
function writeFile() {
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
}
function gotFS(fileSystem) {
    fileSystem.root.getFile(FILE_NAME, {create: true}, gotFileEntry, fail);
}
function gotFileEntry(fileEntry) {
    fileEntry.createWriter(gotFileWriter, fail);
}
function gotFileWriter(writer) {
    writer.onwrite = function (evt) {
        alert('done');
    }
    writer.write(utf8_str);
}
function fail(error) {
    console.log(error.code);
}
于 2013-10-29T11:40:03.793 回答
0

我在另一个项目中遇到了btoa没有进行正确转换的问题,所以我最终在我的项目中使用Base64 二进制文件来解码 Base64 响应。

我注意到的是,与服务器上的文件相比,保存在手机上的文件更大。

也许你也是这种情况?

于 2013-10-29T17:24:35.043 回答