【发布时间】: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