我希望在我的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作为参数,我会得到这样的错误:-> Failed to Failed find root that /data/data/com.echidna.foodreview/files/testImage.jpg
在$cordovaFileOpener2.open中,如果我提供entry.fullPath作为参数,我会得到这个错误消息{“->”:9,“->”:“找不到文件”}
在我的文件管理器中,我搜索了testImage.jpg文件,但没有找到该文件。这应该意味着文件一开始就没有下载,那么success回调是如何触发的呢?
发布于 2017-02-14 15:44:56
这个问题似乎是Android 6.0和更高版本的应用程序所需的新用户权限。文件插件不会请求用户进行存储访问。这必须首先由应用程序请求,这可以由另一个插件处理。有几个插件可以做到这一点,但我使用的是https://github.com/NeoLSN/cordova-plugin-android-permission,这对我来说很有效!
因此,在下载之前,请检查您是否拥有存储空间的写入权限。如果没有,则请求权限(检查和请求权限由上面链接中的插件处理)。获得访问权限后,请下载所需的任何文件!
干杯!
发布于 2017-08-21 20:06:34
而不是
file.dataDirectory 它将文件存储为私有文件,不允许您的文件管理器读取它
使用
file.externalDataDirectory 将文件存储为公共文件并允许其他应用程序打开该文件
请不要与externalDataDirectory混淆,因为(SD卡)它只使用您的设备的内部存储器
https://stackoverflow.com/questions/42153934
复制相似问题