安装依赖项等:

$ 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. WebView的学习

    加载网页: 加载URL(网络或者本地assets文件下的html文件) 加载html代码 Native和JavaScript相互调用(利于混合开发) 1.加载网络URL webview.loadUrl ...

  2. CTF -攻防世界-web高手区-mfw

    ---恢复内容开始--- 昂,我很菜这是网上大神的教程. https://blog.csdn.net/silence1_/article/details/89741733 ---恢复内容结束---

  3. nginx worker进程循环

    worker进程启动后,其首先会初始化自身运行所需要的环境,然后会进入一个循环,在该循环中不断检查是否有需要执行的事件,然后处理事件.在这个过程中,worker进程也是需要与master进程交互的,更 ...

  4. mysql比较运算,逻辑运算,范围查询,模糊查询

    比较运算 > < =  !=  <>   <=  >=  逻辑运算  and  or  not 范围查询  in   模糊查询  like             ...

  5. 2019~2020icpc亚洲区域赛徐州站H. Yuuki and a problem

    2019~2020icpc亚洲区域赛徐州站H. Yuuki and a problem 题意: 给定一个长度为\(n\)的序列,有两种操作: 1:单点修改. 2:查询区间\([L,R]\)范围内所有子 ...

  6. [转帖西部数据的Zonefs将会登陆Linux 5.6内核]

    西部数据的Zonefs将会登陆Linux 5.6内核 https://www.cnbeta.com/articles/tech/948875.htm 据说SMR 能够提高25%的存储密度 但是会造成严 ...

  7. JavaScript—暂告,小节

    Javastript 的学习告一段落了.虽然还有更多的:爬虫 什么的    但是和我在学校的相比 要扎实许多.知道了兼容性 面向对象,闭包.....一些细节的用法. 虽然以后可能很少用到.可是我觉得 ...

  8. 超级顽固的流方式读取doc,docx乱码问题

    因为工作中需要一个把doc或者docx的office文档内容,需要读取出来,并且也没展示功能.代码中第一考虑可能就是通过读取流方式,结果写了以后,各种乱码,百科的解决方案也是千奇百怪,第一点:可能是文 ...

  9. 1. laravel 学习 环境搭建

    1. 项目环境 vagrant + laradock  (因为 自己手动搭建环境太麻烦了 自己弄了一下 感觉还是有些漏洞 所以采用 laradock) 2. Vagrantfile 备注 : box  ...

  10. 系统学习python第二天学习笔记

    1.对day01所学内容的练习 """ 评分规则: A >=90 B >=80 C >=70 D 其他 用户输入成绩,根据成绩的不同显示不同的级别. & ...