我希望在我的离子应用上从互联网/服务器下载文件。我一直在使用文件传输插件尝试实现相同但文件没有下载。
我从插件获得成功回调但是如果我尝试从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文件,找不到该文件。这应该意味着文件首先没有下载,那么成功回调是如何被触发的?
答案 0 :(得分:1)
问题似乎是Android 6.0及更高版本中的应用所需的新用户权限。文件插件不会请求用户进行存储访问。这必须首先由应用程序请求,并且可以由另一个插件处理。有一些插件,但我使用https://github.com/NeoLSN/cordova-plugin-android-permission,这对我有用!
因此,在下载之前,请检查您是否对存储具有写入权限。如果不这样做,则请求权限(检查和请求权限由上面链接中的插件处理)。获得访问权限后,下载您想要的任何文件!
干杯!
答案 1 :(得分:0)
而不是
file.dataDirectory
将文件存储为私有文件,不允许文件管理器读取它
使用
file.externalDataDirectory
将文件存储为公开文件,并允许其他应用程序将其打开
请不要将externalDataDirectory与(SD卡)混淆,它只使用您的设备内部存储器