zoukankan      html  css  js  c++  java
  • Ionic Cordova 调用原生 Api 实现拍照上传 图片到服务器功能

    Ionic 调用 Device 设备 Api 获取手机的设备信息

    1. 找到对应的Api: https://ionicframework.com/docs/native/device/

    2. 安装相关的设备插件

     ionic cordova plugin add cordova-plugin-device 
    npm install --save @ionic-native/device

    3. app.module.ts中引入注册相应模块

    import { Device } from '@ionic-native/device';
    providers: [
        StatusBar,
    SplashScreen,
    Device,
    {provide: ErrorHandler, useClass: IonicErrorHandler}
    ]

    在用到的页面引入看文档使用

    import { Device } from '@ionic-native/device'; constructor(private device: Device) { }
    ...
    console.log('Device UUID is: ' + this.device.uuid);

    Ionic 调用照相机拍照功能。

    1、找到对应的 Api: https://ionicframework.com/docs/native/camera/

    2、安装相关的插件

     ionic cordova plugin add cordova-plugin-camera 
    npm install @ionic-native/camera

    3、在 app.module.ts 中引入注册相应模块

    providers: [ ...
    Camera
    ... ]

    参数

    类型

    说明

    quality

    Number

    保存的图像质量,范围为 0 到 100

    destinationType
    

    Number

    返回值格式
    Camera.DestinationType.DATA_URL 返回 base64 编码 Camera.DestinationType.FILE_URI 返回文件地址

         

    sourceType

    Number

    设置图片来源
    Camera.PictureSourceType.CAMERA 摄像机获取 Camera.PictureSourceType.PHOTOLIBRARY 图库选择

    allowEdit

    Boolean

    选择图片完成是否允许编辑
    
    encodingType
    

    Number

    JPEG = 0, PNG = 1
    

    targetWidth

    Number

    缩放图像的宽度(像素)

    targetHeight
    

    Number

    缩放图像的高度(像素)

    mediaType

    String

    设置媒体的类型

    cameraDirection
    

    Number

    Back = 0, Front-facing = 1
    
    popoverOptions
    

    String

    iOS,iPad 弹出位置

    saveToPhotoAlbum
    

    Boolean

    是否保存到相册

    correctOrientation
    

    Boolean

    设置摄像机拍摄的图像是否为正确的方向
    

    Ionic4 调用 cordova 插件 cordova-plugin-file-transfer 实现 图片上传

    1.安装插件:

     ionic cordova plugin add cordova-plugin-file-transfer
     npm install @ionic-native/file-transfer

    2. app.module.ts 引入依赖注入

    import { FileTransfer } from '@ionic-native/file-transfer/ngx';
    @NgModule({
      declarations: [AppComponent],
      entryComponents: [],
      imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule],
      providers: [
        StatusBar,
        SplashScreen,
        Geolocation,   
        Device,        
        Camera,
        FileTransfer,
        { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
      ],
      bootstrap: [AppComponent]
    })

    使用:

    <ion-header>
      <ion-toolbar>
        <ion-title>
          Tab Three
        </ion-title>
      </ion-toolbar>
    </ion-header>
    
    <ion-content>
    
       设备相关插件
        {{myDevice.uuid}}
    
        <br>
        <br>
    
        <ion-button (click)="doCamera()">
         执行拍照
        </ion-button>
    
        <br>
        <img [src]="imgSrc" />
    </ion-content>
    import { Component } from '@angular/core';
    
    import { Device } from '@ionic-native/device/ngx';
    
    import { Camera, CameraOptions } from '@ionic-native/camera/ngx';
    
    
    import { FileTransfer, FileUploadOptions, FileTransferObject } from '@ionic-native/file-transfer/ngx';
    
    
    @Component({
      selector: 'app-tab3',
      templateUrl: 'tab3.page.html',
      styleUrls: ['tab3.page.scss']
    })
    export class Tab3Page {
    
      public myDevice: any;
      public imgSrc: any;
    
      constructor(private device: Device, private camera: Camera, private transfer: FileTransfer) {
        this.myDevice = this.device;
      }
    
      doCamera() {
    
        const options: CameraOptions = {
          quality: 100,   //质量
          destinationType: this.camera.DestinationType.DATA_URL,   //返回图片的类型  base64  url
          // encodingType: this.camera.EncodingType.JPEG,   //返回格式
          sourceType: this.camera.PictureSourceType.CAMERA,   //从相册选择  还是摄像头拍照
          // mediaType: this.camera.MediaType.PICTURE         //设置媒体的类型
          targetHeight: 400,    //必须加
          targetWidth: 400,    //必须加
          allowEdit: true
        }
    
        this.camera.getPicture(options).then((imageData) => {
         
          let base64Image = 'data:image/jpeg;base64,' + imageData;
          this.imgSrc = base64Image;
    
          this.doUpload(base64Image);
    
    
        }, (err) => {
          // Handle error
    
          console.log(err);
        });
    
      }
    
    
      doUpload(fileSrc) {
    
        const fileTransfer: FileTransferObject = this.transfer.create();
    
        let options: FileUploadOptions = {
          fileKey: 'file',   
          fileName: 'name.jpg',   //名称
          mimeType: 'image/jpeg',
          httpMethod: "POST",
          params: {
            username: "我是一个测试的名称", 
            age: "21",
            height: "180"
          } /*附带的一些信息*/
          // headers: {}
        }
    
        var api = 'http://127.0.0.1:8080/imgUpload';
    
        fileTransfer.upload(fileSrc, api, options)
        .then((data) => {
    
          console.log(data);
          // success
          alert(JSON.stringify(data));
    
        }, (err) => {
          // error
    
          alert(JSON.stringify(err));
        })
    
      }
    
    }

     其他:

    ionic cordova run browser 调试应用

    ionic cordova run browser 这个命令可以让我们在浏览器上面运行 ionic 项目,并可以调用常用的 api
    如果特殊 api 建议真机调试。如果是拍照 、定位之类的 api 可以使用这种方法调试。


    问题:

    1. 安装cordova-plugin-file-transfer以及其他插件都报错提示信息和node_modules模块相

    关错误解决办法。
    删除 node_modules , cd 到项目目录 , 重新用 npm install 安装所有的模块

    2. 安装其他的模块没有问题,安装cordova-plugin-file-transfer出现错误。多尝试几次,还是不行就切换npm源:

    尝试npm切换源,然后重新安装

    在命令行执行命令,npm install -g nrm,全局安装 nrmnrm use taobao 选择源 淘宝为默认源
    nrm ls 查看默认源

  • 相关阅读:
    C# FromBase64String 解码换行问题
    Func与Action
    C# 委托及各种写法
    DNS解析过程和域名收敛、域名发散、SPDY应用
    基础数据类型长度
    C#静态常量和动态常量的区别
    dynamic和var的区别
    ADO.NET中的五个主要对象
    Linux 守护进程创建原理及简易方法
    利用/dev/urandom文件创建随机数
  • 原文地址:https://www.cnblogs.com/loaderman/p/11321444.html
Copyright © 2011-2022 走看看