离子文件下载不起作用

我正在构build一个壁纸离子应用程序。

在应用程序,有一个图像存储在www / assets / img显示。我有build立2个button,下载和检索显示的图像到移动设备的内存。

当我点击下载button,一个对话框显示,说:“下载成功!Pug.jpg已成功下载到:文件path”。但是当我检查手机内存没有这样的文件存在。当我点击“检索”button它显示对话框说“文件检索成功!Pug.jpg已成功从文件path检索”“即使文件不存在于手机内存中。

这是home.ts代码

import {Component} from '@angular/core'; import {NavController, Platform, AlertController} from 'ionic-angular'; import {Transfer, TransferObject} from '@ionic-native/transfer'; import {File} from '@ionic-native/file'; declare var cordova: any; @Component({ selector: 'page-home', templateUrl: 'home.html', providers: [Transfer, TransferObject, File] }) export class HomePage { storageDirectory: string = ''; constructor(public navCtrl: NavController, public platform: Platform, private transfer: Transfer, private file: File, public alertCtrl: AlertController) { this.platform.ready().then(() => { // make sure this is on a device, not an emulation (eg chrome tools device mode) if(!this.platform.is('cordova')) { return false; } if (this.platform.is('ios')) { this.storageDirectory = cordova.file.documentsDirectory; } else if(this.platform.is('android')) { this.storageDirectory = cordova.file.dataDirectory; } else { // exit otherwise, but you could add further types here eg Windows return false; } }); } downloadImage(image) { this.platform.ready().then(() => { const fileTransfer: TransferObject = this.transfer.create(); const imageLocation = `${cordova.file.applicationDirectory}www/assets/img/${image}`; fileTransfer.download(imageLocation, this.storageDirectory + image).then((entry) => { const alertSuccess = this.alertCtrl.create({ title: `Download Succeeded!`, subTitle: `${image} was successfully downloaded to: ${entry.toURL()}`, buttons: ['Ok'] }); alertSuccess.present(); }, (error) => { const alertFailure = this.alertCtrl.create({ title: `Download Failed!`, subTitle: `${image} was not successfully downloaded. Error code: ${error.code}`, buttons: ['Ok'] }); alertFailure.present(); }); }); } retrieveImage(image) { this.file.checkFile(this.storageDirectory, image) .then(() => { const alertSuccess = this.alertCtrl.create({ title: `File retrieval Succeeded!`, subTitle: `${image} was successfully retrieved from: ${this.storageDirectory}`, buttons: ['Ok'] }); return alertSuccess.present(); }) .catch((err) => { const alertFailure = this.alertCtrl.create({ title: `File retrieval Failed!`, subTitle: `${image} was not successfully retrieved. Error Code: ${err.code}`, buttons: ['Ok'] }); return alertFailure.present(); }); } } 

这是home.html代码

 <ion-header> <ion-navbar> <ion-title> File Transfer Example </ion-title> </ion-navbar> </ion-header> <ion-content padding> <ion-card> <ion-card-header> Ionic 3 File Transfer Example </ion-card-header> <ion-card-content> <img src="assets/img/pug.jpg" alt="Cute Pug"> <button ion-button (click)="downloadImage('pug.jpg')" color="secondary">Download image</button> <button ion-button (click)="retrieveImage('pug.jpg')" color="secondary">Retrieve downloaded image</button> </ion-card-content> </ion-card> </ion-content> 

我基于这个Github代码示例构build了这个离子应用程序

我其实想要离子应用程序首先在内部存储器中创build一个文件夹(应用程序命名文件夹),并将所有图像放在那里。所以用户可以访问该文件夹中的文件。例如,如果应用程序名称是“Appsample”,则所有图像应该在内存中的Appsample文件夹。

我怎样才能发展上述目的?

谢谢。

我刚刚发布了几乎相同的问题的答案,请参阅:

下载不能使用filetransfer插件 。

这里的主要问题是,您正在使用以下目录来保存您的文件:

  else if(this.platform.is('android')) { this.storageDirectory = cordova.file.dataDirectory; } 

正如Cordova文档( https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/#where-to-store-files )所述,“cordova.file.dataDirectory”是持久和私人的数据存储在应用程序的沙箱内使用内存。

使用cordova.file.externalDataDirectory来适应您的目的。 然后这个文件应该放在这里:“file:/// storage / emulated / 0 / Android / data / subdomain.domainname.toplevdomain / files / …”。

在Android上,外部存储目录总是存在。 如果设备没有物理卡,Android将模拟它。

Interesting Posts