我在ionic3应用程序中遇到了奇怪的问题。

让我详细描述一下我的情况:
实际上,我需要为 ionic 应用程序提供离线支持。因此,每次调用API时,我都会将数据存储到本地存储中。并将图像从api下载到我的本地目录。这样我就可以在本地资源无法访问互联网时获取数据和图像。

我正在使用此插件将图像从服务器下载到本地:
https://ionicframework.com/docs/native/file-transfer/

如果我运行以下命令,则工作正常:

ionic cordova run android

但是当我运行以下命令时,它不起作用:
ionic cordova run android --prod

代码 :
import { FileTransfer, FileUploadOptions, FileTransferObject } from '@ionic-native/file-transfer';
import { File } from '@ionic-native/file';

constructor(private transfer: FileTransfer, private file: File) { }

const fileTransfer: FileTransferObject = this.transfer.create();

download() {
  const url = 'http://www.example.com/file.pdf';
  fileTransfer.download(url, this.file.dataDirectory + 'file.pdf').then((entry) => {
    console.log('download complete: ' + entry.toURL());
  }, (error) => {
    // handle error
  });
}

我没有从控制台收到任何错误或问题。所以我不知道我在想什么。还可以对本地存储进行适当配置的权限。因此许可不是问题。

最佳答案

最后,我找到了解决该问题的方法!
首先,您应该更新以下命令:

npm i @ionic/app-scripts@latest --save
npm i ionic-native@latest --save

可能在代码中的某处,您之前调用了与文件传输插件相关的任何内容
platform.ready.then()
就我而言:我注入(inject)了一些服务,其中包括这样的一行:
this.fileTransfer = this.transfer.create();
我将其更改为:
this.platform.ready().then(() => {
  // Okay, so the platform is ready and our plugins are available.
  // Here you can do any higher level native things you might need.
  this.fileTransfer = this.transfer.create();
});

现在一切正常。

更多详细信息:

为什么这可以在 Debug模式下工作?

答案很明确,因为在 Debug模式下,设备就绪事件绝对会给火和文件传输带来很长的时间!但是在生产模式下,准备就绪的设备会很快启动,并在此之前调用文件传输。希望对您有所帮助。

10-05 20:28