2017-02-10 136 views
2

我期待从我的离子应用程序上的互联网/服务器上下载文件。我一直在使用文件传输插件来尝试实现相同的功能,但文件没有被下载。无法使用FileTransfer下载Cordova和Ionic中的文件

我从插件获得成功回调,但如果我尝试从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”:“File not found”}

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

回答

1

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

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

干杯!

0

,而不是

file.dataDirectory 

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

使用

file.externalDataDirectory 

存储文件作为公众和允许其他应用程序打开它

请不要混淆externalDataDirecto ry as(SD卡)仅使用您的设备内部存储器

相关问题