无法在Android混合应用程序(Intel XDK Crosswalk构建)中使用JavaScript保存文件

3
我正在使用Intel XDK开发Android平台的JavaScript应用程序以构建APK文件。我正在使用适用于Android构建的Crosswalk,并选中了基于W3C文件API的读取、写入和导航文件系统层次结构的API选项。我可以轻松地打开文件,但无法将它们保存到设备中。
为了保存,我使用了下面的代码(该代码在桌面Chrome浏览器中运行良好):
<html>
<head>
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
</head>
<body>
    <img id="img"/>

<script>
    saveImg = function (img, fileName) {
        var a = document.createElement('a');
        a.setAttribute('href', img.src);
        a.setAttribute("download", fileName);
        document.body.appendChild(a);
        a.click();
        document.body.removeChild(a);
    };

    $(document).ready(function () {
        var img = document.getElementById('img');
        img.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAASUlEQVRo3u3PAQ0AIAwDsIGC+TcLLkhOWgddSU6G a5udT4iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi8cQEjUgGTmE6z3QAAAABJRU5ErkJggg==";
        img.onload = onload;
        function onload(){
            saveImg(img, 'savedImg');
        };
    });
</script>
</body>
</html>

我的安卓设备显示:文件下载已完成,并且在下载文件夹中出现了一个文件:png;base64,iVBORw0KGgoAAAA...6z3QAAAABJRU5ErkJggg==.bin。文件大小为0KB,并且我注意到文件名正好是我尝试保存的图片的base64解释。

如何解决这个问题并成功保存文件?


1
Cordova具有上传/下载文件的API。 这满足您的需求吗? https://github.com/apache/cordova-plugin-file-transfer/blob/dev/doc/index.md - rscohn2
@rscohn2,这个API在加载之前是否有提示,可以像<input type =“file”>那样选择路径? - 31415926
2个回答

2
Crosswalk是一个Web运行时,它不提供像其他浏览器那样的下载管理器UI,因此不应该是运行时的目标。当用户点击下载链接时,Crosswalk会生成Android的选定下载管理器,并启动下载管理器或默认浏览器来下载资源。
如果Web开发人员想要下载文件并将其保存到设备(本地文件系统),我认为Cordova下载API现在应该是一个很好的选择。 请参见:https://cordova.apache.org/docs/en/3.0.0/cordova_file_file.md.html#FileTransfer 它是否符合您的要求?

1
Crosswalk计划支持原生文件系统,可能会在Crosswalk 6上实现,具体日期我不确定。 当原生文件系统被支持后,Web开发人员可以使用XmlHttpRequest API通过Crosswalk文件系统API直接将文件下载并保存到设备(原生文件系统),而不是使用Cordova下载API。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接