【问题标题】:File upload using Ionic Native使用 Ionic Native 上传文件
【发布时间】:2018-08-22 19:23:36
【问题描述】:

我正在尝试使用 Android 的 ionic native。问题是,在控制台中显示 [object Object] Uploaded Successfully,但我的服务器上没有上传任何内容。

我在浏览器中检查了网络选项卡,它甚至没有调用上传 URL。

下面是我的home.html 代码:

<ion-content padding>
  <ion-item>
    <p>{{imageURI}}</p>
    <button ion-button color="secondary" (click)="getImage()">Get Image</button>
  </ion-item>
  <ion-item>
    <h4>Image Preview</h4>
    <img src="{{imageFileName}}" *ngIf="imageFileName" alt="Ionic File" width="300" />
  </ion-item>
  <ion-item>
    <button ion-button (click)="uploadFile()">Upload</button>
  </ion-item>
</ion-content>

home.ts 代码:

import { Component } from '@angular/core';
import { NavController, LoadingController, ToastController } from 'ionic-angular';
import { FileTransfer, FileUploadOptions, FileTransferObject } from '@ionic-native/file-transfer';
import { Camera, CameraOptions } from '@ionic-native/camera';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {

  imageURI:any;
  imageFileName:any;

  constructor(public navCtrl: NavController,
    private transfer: FileTransfer,
    private camera: Camera,
    public loadingCtrl: LoadingController,
    public toastCtrl: ToastController) {}

  getImage() {
    const options: CameraOptions = {
      quality: 100,
      destinationType: this.camera.DestinationType.FILE_URI,
      sourceType: this.camera.PictureSourceType.PHOTOLIBRARY
    }

    this.camera.getPicture(options).then((imageData) => {
      this.imageURI = imageData;
    }, (err) => {
      console.log(err);
      this.presentToast(err);
    });
  }

  uploadFile() {
    let loader = this.loadingCtrl.create({
      content: "Uploading..."
    });
    loader.present();
    const fileTransfer: FileTransferObject = this.transfer.create();

    let options: FileUploadOptions = {
      fileKey: 'ionicfile',
      fileName: 'ionicfile',
      chunkedMode: false,
      mimeType: "image/jpeg",
      headers: {}
    }

    fileTransfer.upload(this.imageURI, 'http://example.com/upload2.php', options)
      .then((data) => {
      console.log(data+" Uploaded Successfully");
     // this.imageFileName = "http://192.168.0.7:8080/static/images/ionicfile.jpg"
      loader.dismiss();
      this.presentToast("Image uploaded successfully");
    }, (err) => {
      console.log(err);
      loader.dismiss();
      this.presentToast(err);
    });
  }

  presentToast(msg) {
    let toast = this.toastCtrl.create({
      message: msg,
      duration: 6000,
      position: 'bottom'
    });

    toast.onDidDismiss(() => {
      console.log('Dismissed toast');
    });

    toast.present();
  }

}

【问题讨论】:

    标签: angular ionic-framework ionic2 ionic3


    【解决方案1】:

    这是因为您没有使用 Exact API 调用。

    在代码中:fileTransfer.upload(this.imageURI, 'http://example.com/upload2.php', options)

    您必须使用指向您的 api 端点的 Api 调用。

    尝试阅读有关 api 调用的更多信息。

    而不是http://example.com/upload2.php 你的电话应该 就像http://example.com/upload2.php/api/uploadmyimage 一样,在upload2.php 中,您已经为/api/uploadmyimage 定义了get 或post 方法

    【讨论】:

      【解决方案2】:

      这是适合我的脚本!

      在html中

      <input type="file" name="file"  (change)="upload($event)" />
      

      在ts文件中

      upload(str:any)
        {
          const formData = new FormData();
      
          this.image=str.target.files[0];
      
          formData.append('files[]', this.image);
          console.log(formData,this.image);
          this.http.post("http://localhost/test/test.php",formData)
          .subscribe((data:any)=>{
            console.log(data);
          })
          console.log(str);
        }
      

      这里有一个 PHP 文件:

      <?php 
      if ($_SERVER['REQUEST_METHOD'] === 'POST') {
          if (isset($_FILES['files'])) {
              $errors = [];
              $path = 'uploads/';
              $extensions = ['jpg', 'jpeg', 'png', 'gif'];
      
              $all_files = count($_FILES['files']['tmp_name']);  
                  $file_tmp = $_FILES['files']['tmp_name'][0];
                  $file_type = $_FILES['files']['type'][0];
                  $file_size = $_FILES['files']['size'][0];
                  $file_ext = strtolower(end(explode('.', $_FILES['files']['name'][0])));
                  $file_name = uniqid().".".$file_ext;
                  $file = $path . $file_name;
                  if (empty($errors)) {
                      move_uploaded_file($file_tmp, $file);
                  }
              if ($errors) print_r($errors);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2022-01-02
        • 1970-01-01
        • 2018-08-16
        • 1970-01-01
        • 2018-07-16
        • 1970-01-01
        • 1970-01-01
        • 2020-05-06
        • 1970-01-01
        相关资源
        最近更新 更多