在TideSDK中写入二进制文件

时间:2014-02-16 17:38:50

标签: titanium tidesdk

我有base64编码的变量和二进制数据(图像),我正在尝试使用TideSDK保存它,但没有PHP(只是JS)。 Ti.Filesystem.getFileStream()+ .open()+ .write()在这种情况下不起作用,我没有找到任何有效的例子。

2 个答案:

答案 0 :(得分:0)

这根本不可能。我查看代码和onyl“字符串”可以保存到文件中。 (我检查了OSX的代码)

您可以将此php函数添加到index.html

<script type="text/php">
// required for the TideSDK file storage
// normal HTML5 browser ignores this part of code because the type is set to PHP.
// TideSDK with PHP binding run this code
// 
function tideSDK_writeBase64AsBinaryData($fileName, $base64){
   $binary=base64_decode($base64);
   $file = fopen($fileName, "w");
   fwrite($file, $binary);
   fclose($file);
}
</script>

此代码没有破坏您的“普通”HTML或JS内容。普通浏览器会忽略这一点。

在我的JS代码中,我有这样的逻辑来存储二进制数据

saveFile: function(fileName, content, contentIsBase64,  successCallback, errorCallback) {
    try{

      if(contentIsBase64){
          tideSDK_writeBase64AsBinaryData(fileName, content);
      }
      else{
          //Doesn't have to exist yet.
          var fileHandle = Ti.Filesystem.getFile(fileName);
          var stream =  Ti.Filesystem.getFileStream(fileHandle);
          stream.open(Ti.Filesystem.MODE_WRITE,false);
          stream.write(content);
          stream.close();
      }

      successCallback({title: fileName});
    }
    catch(e){
        errorCallback();
    }
},

我在我的桌面版“Draw2D touch Designer”项目中使用它,它运行良好。

问候

安德烈亚斯

答案 1 :(得分:0)

安德烈亚斯,你说的完全是假的。有办法!

我写了这个函数,可以帮助你将文件编码为base64并获得你需要的字符串:(不要忘记积分;)

function encodeFileto64(path){
    var f = path;
    var file = Ti.Filesystem.getFile(f);
    var stream = file.open(Ti.Filesystem.MODE_READ);
    var obj = stream.read();
    var base = Ti.Codec.encodeBase64( obj );
    base = base.replace(/[\n\r]/g, '');
    return base;
};

这可以解决所有问题而不必坚持......