我有base64编码的变量和二进制数据(图像),我正在尝试使用TideSDK保存它,但没有PHP(只是JS)。 Ti.Filesystem.getFileStream()+ .open()+ .write()在这种情况下不起作用,我没有找到任何有效的例子。
答案 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;
};
这可以解决所有问题而不必坚持......