如何从Cordova应用程序中的Byte Array下载任何文件?

时间:2016-02-15 06:21:03

标签: javascript cordova ionic-framework cordova-plugins

我有一种cordova - 离子应用。 我想从webservice下载文件,文件可以是任何类型(JPG,PDG,DOCX等)。我无法从直接URL下载文件。所以app正在从Webservice获取该文件的字节数组。

任何人都知道如何从字节数组下载Mobile中的文件。请帮帮我。

1 个答案:

答案 0 :(得分:3)

你可以使用 cordova-plugin-file和 cordova-plugin-file-opener2插件。

https://github.com/apache/cordova-plugin-file

https://github.com/pwlin/cordova-plugin-file-opener2

在使用webservice的功能中,您的代码应如下所示:

var bytes = new Uint8Array(data.d);
app.writePDFToFile(fileName.split(fileName.split, bytes);

这是强制下载的功能:

writePDFToFile: function (fileName, data) {

try {
    window.resolveLocalFileSystemURL(cordova.file.externalApplicationStorageDirectory, function (directoryEntry) {
        directoryEntry.getFile(fileName, { create: true }, function (fileEntry) {

            fileEntry.createWriter(function (fileWriter) {
                fileWriter.onwriteend = function (e) {

                    //window.open(cordova.file.externalApplicationStorageDirectory + fileName, '_system', 'location=yes');

                    cordova.plugins.fileOpener2.open(cordova.file.externalApplicationStorageDirectory + fileName, 'application/pdf',
                        {
                            error: function (e) {
                                console.log('Error status: ' + e.status + ' - Error message: ' + e.message);
                            },
                            success: function () {
                                console.log('file opened successfully');
                            }
                        }
                    );
                };

                fileWriter.onerror = function (e) {
                    alert(e);
                };

                var blob = new Blob([data], { type: 'application/pdf' });

                fileWriter.write(blob);

            }, function onerror(e) {
                alert(e);
            });
        }, function onerror(e) {

            alert(e);
        });
    }, function onerror(e) {            
        alert(e);
    });

} catch (e) {
     alert(e);
}
},

希望这会有所帮助!