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();
});
теперь все отлично работает.
Более Детально :
Почему это работает в режиме отладки?
ответ очень ясен, потому что в режиме отладки устройства готовое событие дает долгое время для огня и передачи файлов, вызванных после этого абсолютно! Но в производственном режиме устройство готово к работе очень быстро и передача файлов вызывается до этого. Надеюсь, это поможет вам.