Cordova Ionic文件传输未到达服务器

Cordova 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

我很难让Ionic 3基本示例代码正常工作。它使用用于相机和文件传输的Cordova插件将图像上传到服务器(Django Rest框架)。前端将在Android上运行

home.ts

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)