本文为原创文章,转载请标明出处

个人做的开源 Demo 登录注册模块采用的是 Wilddog 野狗通讯云的身份认证服务,不得不说各方面和 Google 收购的 Firebase 很像,十分简单易用。其中 User 有个 photoURL 字段是用来存放用户头像 URL 的,所以寻思着找了个免费的第三方图床(SM.MS)来存放用户头像。

用到的 Cordova 插件是 CameraFile Transfer,分别用来拍照、相册选择和上传图片,Cordova 插件的安装、导入、使用我就不赘述了,文档里都有,so 直接上关键代码。

  getPictureAndUpload(sourceType: number) {
const cameraOptions: CameraOptions = {
quality: 80,
destinationType: this.camera.DestinationType.FILE_URI,
sourceType: sourceType,
allowEdit: true,
encodingType: this.camera.EncodingType.JPEG,
targetWidth: 200,
targetHeight: 200,
mediaType: this.camera.MediaType.PICTURE,
correctOrientation: true,
saveToPhotoAlbum: true,
cameraDirection: this.camera.Direction.BACK
}; this.camera.getPicture(cameraOptions).then(image => {
this.onUploadPicture(image);
}, error => {
console.log(error);
});
} onUploadPicture(fileURI: string) {
const fileTransferObject: FileTransferObject = this.fileTransfer.create(); const fileUploadOptions: FileUploadOptions = {
fileKey: 'file',
fileName: 'avatar.jpg',
httpMethod: 'POST',
mimeType: 'image/jpeg',
params: {},
chunkedMode: true,
headers: {'Content-Type': 'multipart/form-data'}
}; let url: string = 'https://sm.ms/api/upload?smfile=' + fileURI; fileTransferObject.upload(fileURI, url, fileUploadOptions).then(data => {
console.log(data["response"]);
wilddog.auth().onAuthStateChanged(user => {
user.updateProfile({'photoURL': JSON.parse(data["response"])["data"]["url"]}).then(() => {
this.getUserData();
}, error => {
this.presentToast(error.name + ': ' + error.message);
});
});
}, error => {
console.log(error);
});
} presentChangeAvatarActionSheet() {
let changeAvatarActionSheet = this.actionSheetCtrl.create({
title: '更换头像', buttons: [{
text: '相册', handler: () => {
this.getPictureAndUpload(this.camera.PictureSourceType.PHOTOLIBRARY);
}
}, {
text: '拍照', handler: () => {
this.getPictureAndUpload(this.camera.PictureSourceType.CAMERA);
}
}, {text: '取消', role: 'cancel'}]
});
changeAvatarActionSheet.present().then(value => {
return value;
});
}
}

如有不当之处,请予指正,谢谢~

Ionic3学习笔记(十六)上传头像至图床的更多相关文章

  1. python3.4学习笔记(十六) windows下面安装easy_install和pip教程

    python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...

  2. SpringMVC:学习笔记(8)——文件上传

    SpringMVC--文件上传 说明: 文件上传的途径 文件上传主要有两种方式: 1.使用Apache Commons FileUpload元件. 2.利用Servlet3.0及其更高版本的内置支持. ...

  3. Django:学习笔记(8)——文件上传

    Django:学习笔记(8)——文件上传 文件上传前端处理 本模块使用到的前端Ajax库为Axio,其地址为GitHub官网. 关于文件上传 上传文件就是把客户端的文件发送给服务器端. 在常见情况(不 ...

  4. Javaweb学习笔记10—文件上传与下载

    今天来讲javaweb的第10阶段学习.文件的上传与下载,今天主要说的是这个功能的实现,不用说了,听名字就是外行人也知道肯定很重要啦. 老规矩,首先先用一张思维导图来展现今天的博客内容.       ...

  5. 文件的上传Commons FileUpload(web基础学习笔记十六)

    一.表单设置 <form action="<%=request.getContextPath()%>/jsp/admin/doAdd.jsp" enctype=& ...

  6. springmvc学习笔记--支持文件上传和阿里云OSS API简介

    前言: Web开发中图片上传的功能很常见, 本篇博客来讲述下springmvc如何实现图片上传的功能. 主要讲述依赖包引入, 配置项, 本地存储和云存储方案(阿里云的OSS服务). 铺垫: 文件上传是 ...

  7. (C/C++学习笔记) 十六. 预处理

    十六. 预处理 ● 关键字typeof 作用: 为一个已有的数据类型起一个或多个别名(alias), 从而增加了代码的可读性. typedef known_type_name new_type_nam ...

  8. Python脚本控制的WebDriver 常用操作 <二十六> 上传文件

    测试用例场景 上传文件的方法是找到上传文件的对象,通常是的对象.然后直接往这个对象send_keys,传入需要上传文件的正确路径.绝对路径和相对路径都可以,但是上传的文件必须存在,否则会报错. Pyt ...

  9. Struts2学习笔记(十一)——文件上传

    1.单文件上传 单文件上传步骤: 1)创建上传jsp页面 文件上传的表单提交方式必须是POST方式,编码类型:enctype="multipart/form-data",默认是 a ...

随机推荐

  1. 计蒜客 数独(DFS)

    蒜头君今天突然开始还念童年了,想回忆回忆童年.他记得自己小时候,有一个很火的游戏叫做数独.便开始来了一局紧张而又刺激的高阶数独.蒜头君做完发现没有正解,不知道对不对? 不知道聪明的你能否给出一个标准答 ...

  2. vue实现简单的过滤器

    html片段: <script src="https://unpkg.com/vue"></script> <div id="app&quo ...

  3. Mysql存储过程案例集合

    注:使用的工具为SQLyog 壹.while简单使用(替换字符串中的字符,和REPLACE效果一样) 注: 这里没有使用REPLACE函数 1.创建存储过程 DROP PROCEDURE IF EXI ...

  4. Python笔记_第一篇_面向过程_第一部分_6.语句的嵌套

    学完条件控制语句和循环控制语句后,在这里就会把“语言”的精妙之处进行讲解,也就是语句的嵌套.我们在看别人代码的时候总会对一些算法拍案叫绝,里面包含精妙和精密的逻辑分析.语句的嵌套也就是在循环体内可以嵌 ...

  5. Java实战——简介

    由于下学期要学习JavaEE所以打算将JavaSE的知识再重新学习一遍,打好基础的同时也希望自己有新的收获和更深刻的理解. 这次复习主要是参考廖雪峰老师的java教程,每学习完一章对其中一些要点进行总 ...

  6. 致 Python 初学者们!

    ​ 前言 在 Python 进阶的过程中,相信很多同学应该大致上学习了很多 Python 的基础知识,也正在努力成长.在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫.我非常理解你们所面临的处 ...

  7. ESLint javascript格式要求

    首行缩进2个空格 eslint: indent functionhello (name) { console.log('hi', name) } 字符串使用单引号(除了避免转义) eslint: qu ...

  8. Oracle数据库添加删除主外键

    (一)添加主键 1.表创建的同时,添加主键约束 语法: create table "表名" ( "列名1" 数据类型及长度 constraint "主 ...

  9. 上传excel文件,读取内容,增加事务写入数据库

    package com.inspur.icpmg.itss.asset.dao.impl; import com.inspur.icpmg.util.DBHelper; import org.apac ...

  10. js获取当前页面名称

    // 取当前页面名称(不带后缀名) function pageName() { var a = location.href; var b = a.split("/"); var c ...