????????今天我在研究ionic3手機(jī)App開發(fā)時(shí)浑塞,需要調(diào)用手機(jī)自帶的攝像頭拍照上傳借跪,在百度了一上午之后,我發(fā)現(xiàn):好多作者寫的博客要么有頭無尾酌壕,要么就是跟著操作一波后掏愁,代碼報(bào)錯(cuò)了P伞!9邸B倜凇!辛掠!我的老天爺鴨谢谦,所以為了讓跟我有相同經(jīng)歷的新手們更快的掌握怎樣快速調(diào)用ionic攝像頭接口,我吐血整理了下面這篇文章萝衩,讓大家少走一些彎路回挽。
? ? ? ? 話不多說,直接上代碼猩谊。
? ? ? ? 哦千劈,對(duì)了,我是下載了ionic3快速開發(fā)的模板來搭建的項(xiàng)目牌捷,小伙伴們可以試試呀墙牌!
? ? ? ? 第一步,安裝cordova-plugin-camera插件暗甥,在命令行(O脖酢!注意要把目錄切換到項(xiàng)目所在目錄)輸入以下代碼
? ? ? ? ? ??1) cordova plugin add?cordova-plugin-camera
? ? ? ? ? ? 2) npm?install?--save?@ionic-native/camera
? ? ? ? 第二步撤防,安裝File插件虽风,在命令行(!即碗!注意要把目錄切換到項(xiàng)目所在目錄)輸入以下代碼
? ? ? ? ? ? ?1)ionic?cordova?plugin?add?cordova-plugin-file?
? ? ? ? ? ? ? 2)npm?install?--save?@ionic-native/file
? ? ? ? 第三步焰情,安裝File Transfer插件,提供上傳和下載文件的方法
? ? ? ? ? ?? 1)ionic?cordova?plugin?add?cordova-plugin-file-transfer
? ? ? ? ? ? ?2)npm?install?--save?@ionic-native/file-transfer
? ? ? ? ?第四步剥懒,在app.module.ts文件中(D谥邸!初橘!新手如果不知道這個(gè)文件在哪里验游,請(qǐng)看以下截圖),需要引入這幾個(gè)插件的provider
? ??????????//手機(jī)攝像頭調(diào)用
????????????import { Camera } from '@ionic-native/camera';
????????????import {File} from '@ionic-native/file';
????????????import { FileTransfer } from '@ionic-native/file-transfer';
這是指引前途的亮點(diǎn)保檐,要注意了哈8酢!夜只!有的文章可能會(huì)說讓引入ng-cordova.js文件垒在,但是我以親身經(jīng)歷告訴大家,用我這種方式來調(diào)用攝像頭不需要引入這個(gè)js文件扔亥,為什么呢场躯?因?yàn)槲乙胫?i>報(bào)錯(cuò)了谈为,報(bào)錯(cuò)了,報(bào)錯(cuò)了L吖亍I■辍!G┪琛秕脓!
? ? ? ? 好了,看到這里呢儒搭,說明我們前期的安裝插件的工作已經(jīng)告了一段落吠架,接下來就是寫測(cè)試頁面來測(cè)試能否調(diào)通攝像頭接口了。
? ? ? ? test.html頁面的測(cè)試代碼如下:
<ion-header>
? <ion-navbar>
? ? <ion-title>
? ? ? 測(cè)試手機(jī)攝像頭調(diào)用功能
? ? </ion-title>
? </ion-navbar>
</ion-header>
<ion-content padding>
? <button ion-button (click)="openCamera()">打開攝像頭</button>
? <button ion-button (click)="upload()">文件上傳</button>
? <button ion-button (click)="download()">文件下載</button>
? <div>
? ? <img [src]="path" />
? </div>
</ion-content>
test.js的測(cè)試代碼如下:
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, Alert } from 'ionic-angular';
import {Camera, CameraOptions} from '@ionic-native/camera';
import {FileTransfer, FileUploadOptions, FileTransferObject} from '@ionic-native/file-transfer';
import {File} from '@ionic-native/file';
import {stringify} from "qs";
@Component({
? selector: 'page-about',
? templateUrl: 'about.html'
})
export class AboutPage {
? path: string;
? access_token: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiYXBpLXJlc291cmNlIl0sInVzZXJfbmFtZSI6ImFkbWluIiwic2NvcGUiOlsicmVhZCIsIndyaXRlIiwidHJ1c3QiXSwiZXhwIjoxNTA5MTk2OTcyLCJhdXRob3JpdGllcyI6WyJST0xFX1VTRVIiXSwianRpIjoiOWFmYmIyYWItMzdiYi00MTIyLTg2NDAtY2FmMDc1OTRmOGZkIiwiY2xpZW50X2lkIjoiY2xpZW50MiJ9.bJOpK0UjCI1ym32uerR_jKp4pv8aLaOxnTeK_DBjYZU';
? fileTransfer: FileTransferObject = this.transfer.create();?
? constructor(public navCtrl: NavController,public navParams: NavParams,private camera: Camera,
? ? private transfer: FileTransfer, private file: File) {
? }?
? //打開攝像頭
? openCamera() {? ?
? ? const options: CameraOptions = {? ? ?
? ? ? quality: 90,//相片質(zhì)量 0 -100
? ? ? destinationType: this.camera.DestinationType.DATA_URL, //DATA_URL 是 base64? FILE_URL 是文件路徑
? ? ? encodingType: this.camera.EncodingType.JPEG,
? ? ? mediaType: this.camera.MediaType.PICTURE,
? ? ? saveToPhotoAlbum: true,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //是否保存到相冊(cè)
? ? ? //sourceType: this.camera.PictureSourceType.CAMERA ,? ? ? ? //是打開相機(jī)拍照還是打開相冊(cè)選擇? PHOTOLIBRARY : 相冊(cè)選擇, CAMERA : 拍照,
? }?
? this.camera.getPicture(options).then((imageData) => {? ?
? ? ? console.log("got file: " + imageData);? ? ? // If it's base64:
? ? ? let base64Image = 'data:image/jpeg;base64,' + imageData;? ? ?
? ? ? this.path = base64Image;? ? ? //If it's file URI
? ? ? // this.path = imageData;
? ? ? this.upload();
? ? }, (err) => {
? ? ? alert("獲取圖片失敗");? ? ? // Handle error
? ? });
? }?
? //文件上傳
? upload(){? ?
? ? const apiPath = "http://192.168.0.104:9090/api/commons/attach?" + stringify({access_token: this.access_token});? ?
? ? let options: FileUploadOptions = {? ? ?
? ? ? fileKey: 'file',? ? ?
? ? ? fileName: 'name.jpg',? //文件名稱
? ? ? headers: {},? ? ? // 如果要傳參數(shù)师妙,寫這里
? ? ? params: {? ? ? ?
? ? ? ? maxSize: 5000000,? ? ? ?
? ? ? ? modularName: 'CNL',? ? ? ?
? ? ? ? allowType: 'jpg;png;pdf;doc;xls;xlsx;docx',
? ? ? }
? ? };? ?
? ? this.fileTransfer.upload(this.path, apiPath, options)
? ? .then((data) => {? ? ? ?
? ? ? console.log(data);
? ? }, (err) => {
? ? ? console.log(err);
? ? });
? }
? //文件下載
? download(){? ?
? ? const url = "http://192.168.0.104:9090/api/fms/sys/attach/file/detail?" + stringify({
? ? ? fileId: 17161,
? ? ? access_token: this.access_token
? ? });? ?
? ? this.fileTransfer.download(url, this.file.externalApplicationStorageDirectory + 'Mac.png').then((entry) => {
? ? ? console.log('download complete: ' + entry.toURL());
? ? }, (error) => {
? ? ? console.log(error);
? ? });
? }
}
ok诵肛,到此文章結(jié)束R倥唷默穴!小伙伴們可以自己到真機(jī)上測(cè)試功能是否可用了,要是你們測(cè)試失敗了褪秀,一定不要急著甩鍋給我蓄诽,先看看安裝步驟有沒有落下的喲!C铰稹仑氛!如果還是測(cè)試出錯(cuò),那可以私信我闸英,我負(fù)責(zé)解決>忉!(小聲bb:反正我是調(diào)通了甫何,領(lǐng)導(dǎo)還表揚(yáng)我了出吹,不接受批評(píng),略略略)
? ??????