无法使用FileTransfer下载Cordova和Ionic中的文件

时间:2017-02-10 07:37:49

标签: cordova ionic-framework phonegap-plugins cordova-plugins

我希望在我的离子应用上从互联网/服务器下载文件。我一直在使用文件传输插件尝试实现相同但文件没有下载。

我从插件获得成功回调但是如果我尝试从fileOpener2插件中打开文件,则会收到该文件不存在的错误。我检查了手机的所有存储空间,但是找不到它。 PFB我使用的代码:

var fileTransfer = new FileTransfer();

var imguri = "http://cdn.wall-pix.net/albums/art-space/00030109.jpg";
var targetPath = cordova.file.dataDirectory + "testImage.jpg";
fileTransfer.download(
imguri,
targetPath,
function(entry) {
    console.log("download complete - Internal URL: " + entry.toInternalURL());
    console.log("download complete - Full Path: " + entry.fullPath);

                            $cordovaFileOpener2.open(entry.fullPath, 'image/jpeg').then(function() {
                        // file opened successfully
                        console.log("File opened successfully!");
                    }, function(err) {
                        // An error occurred. Show a message to the user
                        console.log(JSON.stringify(err));
                    });



},
function(error) {
    console.log("download error source " + error.source);
    console.log("download error target " + error.target);
    console.log("download error code" + error.code);
},
false,
{
    headers: {
        "Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA=="
    }
}
);

在$ cordovaFileOpener2.open中,如果我将entry.toInternalURL作为参数,我会收到此错误 - >无法找到包含/data/data/com.echidna.foodreview/files/testImage.jpg

的已配置根目录

在$ cordovaFileOpener2.open中,如果我将entry.fullPath作为参数,我会收到此错误 - > {“status”:9,“message”:“找不到文件”}

从我的文件管理器中,我搜索了testImage.jpg文件,找不到该文件。这应该意味着文件首先没有下载,那么成功回调是如何被触发的?

2 个答案:

答案 0 :(得分:1)

问题似乎是Android 6.0及更高版本中的应用所需的新用户权限。文件插件不会请求用户进行存储访问。这必须首先由应用程序请求,并且可以由另一个插件处理。有一些插件,但我使用https://github.com/NeoLSN/cordova-plugin-android-permission,这对我有用!

因此,在下载之前,请检查您是否对存储具有写入权限。如果不这样做,则请求权限(检查和请求权限由上面链接中的插件处理)。获得访问权限后,下载您想要的任何文件!

干杯!

答案 1 :(得分:0)

而不是

 file.dataDirectory 

将文件存储为私有文件,不允许文件管理器读取它

使用

 file.externalDataDirectory 

将文件存储为公开文件,并允许其他应用程序将其打开

请不要将externalDataDirectory与(SD卡)混淆,它只使用您的设备内部存储器