Ionic File Transfer Plugin не работает в производственной версии

я сталкиваюсь с проблемой weired в приложении 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
  });
}

Я не получаю никаких ошибок или проблем с консоли. Так что я не знаю, чего мне не хватает. Существует также разрешение для локального хранилища, настроенного хорошо. поэтому разрешение не является проблемой.

1 ответов


наконец-то я нашел решение этой проблемы! сначала вы должны обновить эти команды:

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

и, вероятно, где-то в вашем коде вы называете все, что связано с плагином передачи файлов до

platform.ready.then()

в моем случае: я впрыскиваю некоторую услугу, которая включает такую строку:

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();
});

теперь все отлично работает.

Более Детально :

Почему это работает в режиме отладки?

ответ очень ясен, потому что в режиме отладки устройства готовое событие дает долгое время для огня и передачи файлов, вызванных после этого абсолютно! Но в производственном режиме устройство готово к работе очень быстро и передача файлов вызывается до этого. Надеюсь, это поможет вам.