ionic3項(xiàng)目中調(diào)用手機(jī)攝像頭,拍攝照片并上傳

????????今天我在研究ionic3手機(jī)App開發(fā)時(shí),需要調(diào)用手機(jī)自帶的攝像頭拍照上傳,在百度了一上午之后,我發(fā)現(xiàn):好多作者寫的博客要么有頭無尾,要么就是跟著操作一波后,代碼報(bào)錯(cuò)了?。。。。?!我的老天爺鴨,所以為了讓跟我有相同經(jīng)歷的新手們更快的掌握怎樣快速調(diào)用ionic攝像頭接口,我吐血整理了下面這篇文章,讓大家少走一些彎路。

? ? ? ? 話不多說,直接上代碼。

? ? ? ? 哦,對了,我是下載了ionic3快速開發(fā)的模板來搭建的項(xiàng)目,小伙伴們可以試試呀!

? ? ? ? 第一步,安裝cordova-plugin-camera插件,在命令行(??!注意要把目錄切換到項(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文件中(?。?!新手如果不知道這個(gè)文件在哪里,請看以下截圖),需要引入這幾個(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),要注意了哈!??!有的文章可能會說讓引入ng-cordova.js文件,但是我以親身經(jīng)歷告訴大家,用我這種方式來調(diào)用攝像頭不需要引入這個(gè)js文件,為什么呢?因?yàn)槲乙胫?i>報(bào)錯(cuò)了,報(bào)錯(cuò)了,報(bào)錯(cuò)了?。。。。?/i>

? ? ? ? 好了,看到這里呢,說明我們前期的安裝插件的工作已經(jīng)告了一段落,接下來就是寫測試頁面來測試能否調(diào)通攝像頭接口了。

? ? ? ? test.html頁面的測試代碼如下

<ion-header>

? <ion-navbar>

? ? <ion-title>

? ? ? 測試手機(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的測試代碼如下:

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,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //是否保存到相冊

? ? ? //sourceType: this.camera.PictureSourceType.CAMERA ,? ? ? ? //是打開相機(jī)拍照還是打開相冊選擇? PHOTOLIBRARY : 相冊選擇, 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é)束?。?/b>小伙伴們可以自己到真機(jī)上測試功能是否可用了,要是你們測試失敗了,一定不要急著甩鍋給我,先看看安裝步驟有沒有落下的喲!?。∪绻€是測試出錯(cuò),那可以私信我,我負(fù)責(zé)解決??!(小聲bb:反正我是調(diào)通了,領(lǐng)導(dǎo)還表揚(yáng)我了,不接受批評,略略略)

? ??????

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容