Cordova Ionic文件传输未到达服务器
我很难让Ionic 3基本示例代码正常工作。它使用用于相机和文件传输的Cordova插件将图像上传到服务器(Django Rest框架)。前端将在Android上运行 home.tsCordova Ionic文件传输未到达服务器,cordova,ionic-framework,ionic3,ionic-native,Cordova,Ionic Framework,Ionic3,Ionic Native,我很难让Ionic 3基本示例代码正常工作。它使用用于相机和文件传输的Cordova插件将图像上传到服务器(Django Rest框架)。前端将在Android上运行 home.ts import {Component} from '@angular/core'; import { NavController, ToastController, Platform, LoadingController, Loading } from 'ionic-angular'; impo
import {Component} from '@angular/core';
import {
NavController,
ToastController,
Platform,
LoadingController,
Loading
} from 'ionic-angular';
import {File} from '@ionic-native/file';
import {Transfer, TransferObject} from '@ionic-native/transfer';
import {FilePath} from '@ionic-native/file-path';
import {Camera} from '@ionic-native/camera';
declare var cordova: any;
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
lastImagePath: string = null;
lastImage: string = null;
loading: Loading;
constructor(public navCtrl: NavController,
private camera: Camera,
private transfer: Transfer,
private file: File,
private filePath: FilePath,
public toastCtrl: ToastController,
public platform: Platform,
public loadingCtrl: LoadingController) {
}
public clickTakePicture() {
// Create options for the Camera Dialog
var options = {
quality: 80,
sourceType: this.camera.PictureSourceType.CAMERA,
saveToPhotoAlbum: false,
correctOrientation: true
};
// Get the data of an image
this.camera.getPicture(options).then((imagePath) => {
var currentName = imagePath.substr(imagePath.lastIndexOf('/') + 1);
this.lastImagePath = imagePath;
this.lastImage = currentName;
}, (err) => {
this.presentToast('Error while getting image from camera.');
});
}
private presentToast(text) {
let toast = this.toastCtrl.create({
message: text,
duration: 4000,
position: 'top'
});
toast.present();
}
public uploadImage() {
// Destination URL
var url = "http://192.168.1.6:8000/api/photo/";
// File for Upload
var targetPath = this.lastImagePath;
// File name only
var filename = this.lastImage;
var options = {
fileKey: "file",
fileName: filename,
chunkedMode: false,
mimeType: "multipart/form-data",
params: {'fileName': filename}
};
const fileTransfer: TransferObject = this.transfer.create();
this.loading = this.loadingCtrl.create({
content: 'Uploading...',
});
this.loading.present();
// Use the FileTransfer to upload the image
fileTransfer.upload(targetPath, url, options).then(data => {
this.loading.dismissAll()
this.presentToast('Image succesful uploaded.');
}, err => {
this.loading.dismissAll()
this.presentToast('Error uploading targetPath ' + targetPath);
});
}
}
home.html
<ion-header>
<ion-navbar color="primary">
<ion-title>
Devdactic Image Upload2
</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
lastImagePath = {{ lastImagePath }}
lastImage = {{ lastImage }}
<img src="{{ lastImagePath }}" style="width: 100%" [hidden]="lastImagePath === null">
<h3 [hidden]="lastImagePath !== null">Please Select Image!</h3>
</ion-content>
<ion-footer>
<ion-toolbar color="primary">
<ion-buttons>
<button ion-button icon-left (click)="clickTakePicture()">
<ion-icon name="camera"></ion-icon>Select Image
</button>
<button ion-button icon-left (click)="uploadImage()" [disabled]="lastImage === null">
<ion-icon name="cloud-upload"></ion-icon>Upload
</button>
</ion-buttons>
</ion-toolbar>
</ion-footer>
当使用ionic cordova run android--debug时,我可以看到来自我的服务器(HTTP 401)的响应,我可以处理该响应
10-10 22:28:23.989 18878 18878铬:[信息:控制台(131)]“错误
3“,资料来源:file:///android_asset/www/build/main.js (131) 10-10
22:28:23.990 18878 18878 I铬:[信息:控制台(132)]“错误
file:///storage/emulated/0/Android/data/io.ionic.starter/cache/1507642101200.jpg",
资料来源:file:///android_asset/www/build/main.js (132) 10-10
22:28:23.991 18878 18878 I铬:[信息:控制台(133)]“错误
“,资料来源:
file:///android_asset/www/build/main.js (133) 10-10 22:28:23.992 18878
18878 I:[信息:控制台(134)]“错误为空”,来源:
file:///android_asset/www/build/main.js (134) 10-10 22:28:23.992 18878
18878 I:[信息:控制台(135)]“错误为空”,来源:
file:///android_asset/www/build/main.js (135) 10-10 22:28:23.993 18878
18878 I铬:[信息:控制台(136)]“管道破裂错误”,来源:
file:///android_asset/www/build/main.js (136)
使用ionic upload和Legacy ionic View应用程序时,我的服务器根本没有响应,错误字段为空
10-10 23:06:56.199 28933 28933 I铬:[信息:控制台(132)]“错误
空”,来源:
file:///data/user/0/com.ionic.viewapp/files/files//5bdfa3f9/build/main.js
(132)10-10 23:06:56.199 28933 28933 I[信息:控制台(133)]
“错误为空”,来源:
file:///data/user/0/com.ionic.viewapp/files/files//5bdfa3f9/build/main.js
(133)10-10 23:06:56.199 28933 28933 I[信息:控制台(134)]
“错误为空”,来源:
file:///data/user/0/com.ionic.viewapp/files/files//5bdfa3f9/build/main.js
(134)10-10 23:06:56.200 28933 28933 I[信息:控制台(135)]
“错误为空”,来源:
file:///data/user/0/com.ionic.viewapp/files/files//5bdfa3f9/build/main.js
[信息:控制台(136)]
“错误为空”,来源:
file:///data/user/0/com.ionic.viewapp/files/files//5bdfa3f9/build/main.js
[信息:控制台(137)]
“错误为空”,来源:
file:///data/user/0/com.ionic.viewapp/files/files//5bdfa3f9/build/main.js
(137)
您可以将
err
对象记录到console.log中吗?并将其添加到问题中?您确定可以从设备访问计算机的本地IP吗?是的,我可以从设备访问我的PC。这似乎只发生在我现在使用传统的Ionic View应用程序时。我没有尝试过新的Ionic View应用程序,因为上次尝试时它有bug。你能不能控制台。记录err
对象?并将其添加到问题中?您确定可以从设备访问计算机的本地IP吗?是的,我可以从设备访问我的PC。这似乎只发生在我现在使用传统的Ionic View应用程序时。我没有尝试过新的Ionic View应用程序,因为上次尝试时它有问题。
console.log("Error " + err.code)
console.log("Error " + err.source)
console.log("Error " + err.target)
console.log("Error " + err.http_status)
console.log("Error " + err.body)
console.log("Error " + err.exception)