【问题标题】:file-transfer incidence in IOS IONIC 3IOS IONIC 3 中的文件传输发生率
【发布时间】:2018-10-03 21:57:33
【问题描述】:

我评论说我正在使用 IONIC 3 开发应用程序,并且正在使用本机文件传输库。

想要在 IOS 中下载文件时它不会执行它,在 android 中安装或调试时不会执行。

根据 ionic 文档,我正在正确实现它,但我不明白为什么或缺少什么,以便 IOS 可以执行 transfer.download 这是未执行的指令

我在控制台中收到以下错误:

console.warn: 'Native: 尝试访问 FileTransfer 插件但未安装。

下面我留下我的代码:

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

import { LoadingController } from 'ionic-angular';

declare var cordova: any;

@IonicPage()
@Component({
selector: 'page-liquidaciones',
templateUrl: 'liquidaciones.html',
})
export class LiquidacionesPage {
formLiquidaciones: FormGroup;
 public txtCorreoLiquidacion;
rutUsuario: any;
resultado: any;
liquidaciones: any;
liquidacionesSeleccionadas:any={};
loading: any;
storageDirectory: string = '';
//private fileTransfer: FileTransferObject;
//private localPath = '';

constructor(public navCtrl: NavController, 
          public navParams: NavParams,
          private alertCtrl: AlertController, 
          public formBuilder: FormBuilder, 
          public kiberKiberpro: KibernumKiberproProvider,
          public databaseService: DatabaseServiceProvider, 
          private transfer: FileTransfer, 
          private file: File,
          private androidPermissions: AndroidPermissions,
          public loadingController: LoadingController,
          public platform: Platform
        ){

this.formLiquidaciones = this.formBuilder.group({
  txtCorreoLiquidacion: ['', Validators.required]
});


this.platform.ready().then(() => {

  if(!this.platform.is('cordova')) {
    return false;
  }

  if (this.platform.is('ios')) {
    //this.storageDirectory = this.file.dataDirectory;
    this.storageDirectory = cordova.file.dataDirectory;
  }
  else if(this.platform.is('android')) {
    this.storageDirectory = cordova.file.externalRootDirectory + '/Download/';
    this.androidPermissions.checkPermission(this.androidPermissions.PERMISSION.READ_EXTERNAL_STORAGE).then(
      result => {
        if (result.hasPermission) {
          // code
        } else {
          this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.READ_EXTERNAL_STORAGE).then(result => {
            if (result.hasPermission) {
              // code
            }
          });
        }
      },
      err => this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.READ_EXTERNAL_STORAGE)
    );

  }
  else {
    return false;
  }
});

  this.databaseService.getSesion(2).then(result => {
    this.rutUsuario = result.valor;
    })
  .catch( error => {
  });
}

DescargarLiquidaciones(){
this.loading = this.loadingController.create({ content: "Descargando Liquidacion(es)..." });
  const fileTransfer: FileTransferObject = this.transfer.create();

  var enviarLiquidaciones = [];
  for(var i in this.liquidacionesSeleccionadas) {
    if(this.liquidacionesSeleccionadas[i]) {
      enviarLiquidaciones.push(i);
    }
  }

  if(enviarLiquidaciones.length == 0)
  {
    this.alerta("Debe seleccionar por lo menos una liquidación para que sea descargada.");
  }
  else
  {
    this.loading.present();

    this.txtCorreoLiquidacion = '';
    this.kiberKiberpro.DescargarEnviarLiquidaciones(this.rutUsuario,enviarLiquidaciones, this.txtCorreoLiquidacion).then((res) => {
      this.resultado = res;
      var respuesta = JSON.parse(this.resultado.data);
      let datos: string = JWT(this.resultado.data);
      if(respuesta.status == "200") {
        let autorizacion = this.resultado.headers;
        let nombreArchivo = datos.split("tmp/");
        let urlFinal = datos;
        fileTransfer.download(urlFinal , this.storageDirectory  + nombreArchivo[1]).then((entry) => {  
          console.log("LLEGA ACA");
          this.alerta("Se ha descargado el archivo de manera satisfactoria.");
          console.log("LLEGA ACA 2");
          this.loading.dismissAll();
          console.log("LLEGA ACA 3");
          this.databaseService.GuardaSQLlite(1, autorizacion.authorization);
          this.navCtrl.setRoot(HomePage);
        }, (error) => {
          this.alerta("Hubo un error al momento de descargar el archivo. Si el problema persiste favor contactarse al 816 35 12 o 816 35 09.");
          this.loading.dismissAll();
        });

      }
      else if (respuesta.status == "201"){
        this.alerta("Hubo un problema con el envío de la(s) liquidacion(es) al correo ingresado. Si el problema persiste favor contactarse al 816 35 12 o 816 35 09");
        this.loading.dismissAll();
        let autorizacion = this.resultado.headers;
        this.databaseService.GuardaSQLlite(1, autorizacion.authorization);
      }
      else if (respuesta.status == "401"){
        this.alerta("Token no válido.");
        this.loading.dismissAll();
      }
      else{
        this.alerta("Hubo un problema inesperado, Favor intente nuevamente. Si el problema persiste favor contactarse al 816 35 12 o 816 35 09");
        this.loading.dismissAll();
      }
    }, (err) => {
      this.alerta("Ha ocurrido un problema, intente nuevamente por favor. Si el error persiste pongase en contacto con el area de soporte.");
      this.loading.dismissAll();
    });
  }
}

我会一直关注您的回答,并提前感谢您的帮助和意见

【问题讨论】:

  • 您是否在不同的机器上运行 Android 和 iOS 测试?如果是这样,您似乎需要在 iOS 机器上运行npm install
  • 首先感谢您的回复。回答你的问题是肯定的,我实际上在不同的计算机上运行 Android 和 IOS。关于 npm 安装,我已经这样做了,因为我从公司在 github 上的存储库中从头开始下载了源代码。事实上,如果我没有安装 npm 插件,当我想构建或运行 ios 时它会要求我,事实并非如此

标签: ionic-framework ionic3 file-transfer ionic-native


【解决方案1】:

我忘记输入我的 ionic 信息如下:

离子:

离子(离子 CLI):4.1.2(/usr/local/lib/node_modules/ionic) 离子框架:离子角 3.9.2 @ionic/app-scripts:3.1.10

科尔多瓦:

cordova (Cordova CLI) : 8.1.1 (cordova-lib@8.1.0) 科尔多瓦平台:ios 4.5.4 Cordova 插件:cordova-plugin-ionic-keyboard 2.1.3、cordova-plugin-ionic-webview 1.2.1(和其他 6 个插件)

系统:

ios 部署:2.0.0 NodeJS : v8.12.0 (/usr/local/bin/node) npm:6.4.1 操作系统:macOS Xcode:Xcode 9.4 构建版本 9F1027a

【讨论】:

  • 不需要发布它作为答案,您可以编辑初始问题
【解决方案2】:

在我看来,您的文件传输逻辑未包含在 this.platform.ready() 调用中。会不会是在平台准备好之前调用它(因此,在插件准备好使用之前)?

【讨论】:

    猜你喜欢
    • 2018-05-13
    • 2020-01-15
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 2018-01-24
    • 2019-07-29
    相关资源
    最近更新 更多