7

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

ソリューションガイズとは……?

4

3 に答える 3

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...    

次に、'BINARY_ARR' を FileWriter に渡して、ファイルに書き込みます。

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

良い1日を.. :)

于 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 に答える