安装依赖项等:

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

创建ImgUploadProvider服务

import { Injectable } from "@angular/core";
import { ActionSheetController } from "ionic-angular";
import 'rxjs/add/operator/map';
import { Camera,CameraOptions} from "@ionic-native/camera";
import { ImagePicker ,ImagePickerOptions} from "@ionic-native/image-picker";
import { AlertController } from "ionic-angular";
import { FileTransfer, FileUploadOptions, FileTransferObject } from '@ionic-native/file-transfer'; @Injectable()
export class ImgUploadProvider {
avatar: string = "";
constructor(
private camera: Camera,
private alertCtrl:AlertController,
public actionSheetCtrl: ActionSheetController,
public imagePicker: ImagePicker,
private fileTransfer: FileTransfer,
){ }
upload(filePath,uploadUrl) {
let options: FileUploadOptions = {
fileKey: 'image',
fileName: 'name.jpg',
headers: {
api_token:"HBAPI@20180608jiangbei"
}
// .....
};
const fileTransfer: FileTransferObject = this.fileTransfer.create();
return fileTransfer.upload(filePath, uploadUrl, options)
.then((data) => {
let alert =this.alertCtrl.create({
title:'上传成功!',
message:JSON.stringify(data),
buttons: ['确定'],
});
alert.present();
return data;
}, (err) => {
let alert =this.alertCtrl.create({
title:'上传失败!',
message:JSON.stringify(err),
buttons: ['确定'],
});
alert.present();
})
}
presentActionSheet() {
return new Promise((resolve,reject)=>{
let actionSheet = this.actionSheetCtrl.create({
buttons: [{
text: '拍照',
role: 'takePhoto',
handler: () => {
resolve('takePhoto');
}
}, {
text: '从相册选择',
role: 'chooseFromAlbum',
handler: () => {
resolve('chooseFromAlbum');
}
}, {
text: '取消',
role: 'cancel',
handler: () => {
console.log("cancel");
}
}]
});
actionSheet.present().then(value => {
return value;
});
})
}
chooseFromAlbum() {
const options: ImagePickerOptions = {
maximumImagesCount: ,
quality:
// width: 200,
// height: 200
};
return this.imagePicker.getPictures(options).then(images => {
if (images.length > ) {
this.presentAlert();
} else if (images.length === ) {
this.avatar = images[].slice();
// alert('Image URI: ' + images[0]);
return this.avatar;
}
}, error => {
console.log('Error: ' + error);
});
}
takePhoto() {
const options: CameraOptions = {
quality: ,
allowEdit: true,
// targetWidth: 200,
// targetHeight: 200,
saveToPhotoAlbum: true,
};
return this.camera.getPicture(options).then(image => {
// console.log('Image URI: ' + image);
this.avatar = image.slice();
return this.avatar;
}, error => {
console.log('Error: ' + error);
});
}
presentAlert() {
let alert = this.alertCtrl.create({title: "上传失败", message: "只能选择一张图片作为头像哦", buttons: ["确定"]});
alert.present().then(value => {
return value;
});
}
}

在页面注入ImgUploadProvider服务:

import { ImgUploadProvider } from "../../providers/img-upload/img-upload";

//

private imgUploadProvider:ImgUploadProvider,

调用:

  private presentActionSheet(){
this.imgUploadProvider.presentActionSheet().then((res)=>{
if(res==="takePhoto"){
this.imgUploadProvider.takePhoto().then((res)=>{
this.avatar=res;
this.imgUploadProvider.
upload(res,this.service.BaseUrl+"/file/imageupload?api_token=your token")
.then((data:any)=>{
this.avatar=data.response.data[];
})
});
}else if(res==="chooseFromAlbum"){
this.imgUploadProvider.chooseFromAlbum().then((res)=>{
this.avatar=res;
this.imgUploadProvider.upload(res,this.service.BaseUrl+"/file/imageupload?api_token=your token")
.then((data:any)=>{
this.avatar=data.response.data[];
})
// alert(res);
});
}
});
}

ionic3 打开相机与相册,并实现图片上传的更多相关文章

  1. ios中摄像头/相册获取图片压缩图片上传服务器方法总结

    本文章介绍了关于ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结,有需要了解的同学可以参考一下下.     这几天在搞iphone上面一个应用的开发,里面有需要摄像头/相册编程和图片上传的问 ...

  2. mui + H5 调取摄像头和相册 实现图片上传

    最近要用MUI做项目,在研究图片上传时 ,遇到了大坑 ,网上搜集各种资料,最终写了一个demo,直接看代码.参考(http://www.cnblogs.com/richerdyoung/p/66123 ...

  3. iOS图片上传1

    这几天在搞iphone上面一个应用的开发,里面有需要摄像头/相册编程和图片上传的问题,在这里总结一下. [部分知识] iphone中图像通常存储在4个地方[相册.应用程序包.沙盒.Internet], ...

  4. [转]微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传

    本文转自:http://blog.csdn.net/qq_31383345/article/details/53014610 今天遇到微信小程序的用户头像设置功能,做笔记. 先上gif: 再上代码: ...

  5. 微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传

    1.index.wxml <!--index.wxml--> <button style="margin:30rpx;" bindtap="choose ...

  6. Hbuilder mui 相册拍照图片上传

    http://www.bcty365.com/content-146-3648-1.html 使用流程 弹出actionSheet /*点击头像触发*/ document.getElementById ...

  7. php相册功能实现(包含php图片上传,后台管理,浏览和删除)教程例子

    相册功能实现(包含php图片上传,后台管理,浏览和删除)教程例子包括五个部分: 一.相册首页 <html> <head> <meta charset="utf- ...

  8. HTML5 Plus 拍照或者相册选择图片上传

    HBuilder+HTML5 Plus+MUI实现拍照或者相册选择图片上传,利用HTML5 Plus的Camera.Gallery.IO.Storage和Uploader来实现手机APP拍照或者从相册 ...

  9. 微信JS图片上传与下载功能--微信JS系列文章(三)

    概述 在前面的文章微信JS初始化-- 微信JS系列文章(一)中已经介绍了微信JS初始化的相关工作,接下来本文继续就微信JS的图片上传功能进行描述,供大家参考. 图片上传 $(function(){ v ...

随机推荐

  1. PAT Advanced 1013 Battle Over Cities (25) [图的遍历,统计连通分量的个数,DFS,BFS,并查集]

    题目 It is vitally important to have all the cities connected by highways in a war. If a city is occup ...

  2. 进度1_家庭记账本App

    今天完成了昨天的初步构想,详细介绍见上一篇博客,具体项目结构和案例如下: MainActivity.java: package com.example.familybooks; import andr ...

  3. 经典线段树 UVALive 3938/UVA 1400

    题意:就是相当于动规里面的求最大连续子串,不同的是,这里需要读入一个区间x,y,输出的区间 a,b 且x<=a<=b<=y,使得a b的连续子串最长,而且询问次数达到了10的五次方. ...

  4. 出现UnboundLocalError: local variable 'a' referenced before assignment异常的情况与解决方法

    出现UnboundLocalError: local variable ‘a’ referenced before assignment异常的情况与解决方法字面意思:局部变量赋值前被引用原因:局部变量 ...

  5. Res-net 标准版本源码差异-官方源码示例

    # resnet https://github.com/tensorflow/models/blob/master/research/slim/nets/resnet_v1.py https://gi ...

  6. Maven--部署构件至 Nexus

    日常开发生成的快照版本构件可以直接部署到 Nexus 中策略为 Snapshot 的宿主仓库中,项目正式发布的构件则应该部署到 Nexus 中策略为 Release 的宿主仓库中. <proje ...

  7. centos挂载磁盘

    Aliyun实例为例 简单操作: 查看磁盘情况:fdisk -l 对数据盘进行分区,一般类似/dev/vdb这种为数据盘 输入fdisk  /dev/vdb 对数据盘进行分区.根据提示,输入 n, p ...

  8. Redis5新特性Streams作消息队列

    前言 Redis 5 新特性中,Streams 数据结构的引入,可以说它是在本次迭代中最大特性.它使本次 5.x 版本迭代中,Redis 作为消息队列使用时,得到更完善,更强大的原生支持,其中尤为明显 ...

  9. 干货 | 调用AI api 实现网页文字朗读

    京东云上提供了足够多的人工智能api,并且都使用了http的方式进行了封装,用户可以方便在自己的系统中接入京东云的ai能力.今天就是介绍一下如何编写很少的代码就能使用京东云的语音合成api在网页中实现 ...

  10. C++---类成员变量定义为引用

    摘要:类成员变量是可以定义为引用类型的,但是我们需要注意一下用法 note1:在类中定义引用变量, 必须要在初始化列表中初始化该成员变量(const 类型数据成员也必须在初始化列表中进行初始化) #i ...