unicloud云函数url化后,客户端通过url地址向云函数发送数据流并传递到云存储中

本文主要是介绍unicloud云函数url化后,客户端通过url地址向云函数发送数据流并传递到云存储中,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

在不久前录制过这样一门课程,使用uniapp生态开发API接口,通过这套课程,你不需要后后端Java、Python、PHP等后端语言,你只需要用前端的知识就可以构建这样一套API接口,而且使用uniapp生态开发接口更简单高效,如果没有学习过这么课程的同学 ,一定要去看一下这们课程。基于uni-app生态开发API接口

当初录制这么课程的时候,只是完成了常规的数据交互,现在有个需求,就是前端通过接口上传图片的操作,从网上找过很多的实现方案,有些内容不够全面,有些方法失效了,那么通过这篇帖子,通过实际的案例,来介绍一下前后端如何联调实现本地图片上传的。

客户端代码

<button @click="fileUpload" class="avatar-wrapper"><image class="avatar" :src="avatarUrl2" mode="aspectFill"></image>
</button>//定义图片地址变量
const avatarUrl2 = ref('https://mp-3309c116-4743-47d6-9979-462d2edf878c.cdn.bspapp.com/xxmPath/useravatar.png');
//上传图片核心函数,将图片转base64,小程序和H5的方式不同,下面有条件编译
function fileUpload(){	// #ifdef H5	uni.chooseImage({count:1,success:res=>{let image = res.tempFiles[0];	if(image.size>=1024*1024){return uni.showToast({icon:"none",title:"图片不能超过1M"})}	getBase64(image).then(base=>{uni.request({url:"https://tea.qingnian8.com/filedemo",data:base,method:"POST",success:res=>{avatarUrl2.value = res.data.fileID}})})}})	// #endif// #ifdef MP-WEIXIN	uni.chooseMedia({count:1,mediaType:["image"],		success:(res)=>{let tempFiles = res.tempFiles[0];if(tempFiles.size>=1024*1024){return uni.showToast({icon:"none",title:"图片不能超过1M"})}			// 获取微信拿到的图片的临时地址并保存到本地			uni.getImageInfo({src: tempFiles.tempFilePath,success: (image)=> {console.log(image);if(image.type=='png'||image.type=='jpeg'){// 对符合类型的图片转换为base64类型uni.getFileSystemManager().readFile({// 小程序官方提供的base64转码APIfilePath:image.path,// 所需转码图像路径encoding:"base64",// 转码类型success:(res)=>{	let imageBase64='data:image/'+image.type+';base64,'+res.data;			uni.request({url:"https://tea.qingnian8.com/filedemo",data:imageBase64,method:"POST",success:res=>{avatarUrl2.value = res.data.fileID}})								}})}else{uni.showToast({title:'当前只支持png/jpeg格式',duration:2500,icon:'none'})}}});}})	// #endif
}//H5端,file转base64
function getBase64(file) {return new Promise((resolve, reject) => {///FileReader类就是专门用来读文件的const reader = new FileReader()//开始读文件//readAsDataURL: dataurl它的本质就是图片的二进制数据, 进行base64加密后形成的一个字符串,reader.readAsDataURL(file)// 成功和失败返回对应的信息,reader.result一个base64,可以直接使用reader.onload = () => resolve(reader.result)// 失败返回失败的信息reader.onerror = error => reject(error)})
}

unicloud云函数端接收base64

exports.main = async (event,context) => {	//接收前端传输过来的base64数据let imageBase = event.body;		//去除编码头let base64 = imageBase.split(",")[1];//获取文件后缀名let suffix = imageBase.split('/')[1].split(';')[0];let result = await uniCloud.uploadFile({//保存到云端的文件名cloudPath: Date.now() + "." + suffix,//base64转buffer(阿里云支持buffer和绝对路径)		fileContent: Buffer.from(base64,'base64'),success(res){//阿里云直接返回文件ID就是下载地址return result.fileID},fail(err) {reject(new Error(err.errMsg))}});			return result;//返回上传文件路径};

以上代码有些字自己编写的,有些是从网上获取的灵感思路,最终整合成这种方案了,因为网上还基本没有写云函数URL化上传到unicloud云存储的完整方法,这里就通过一个小案例,将本地图片上传到unicloud云存储的方式详细的代码开源出来,帮助有需要的同学,如果对你有帮助,请记得点赞收藏哦。

这篇关于unicloud云函数url化后,客户端通过url地址向云函数发送数据流并传递到云存储中的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/443709

相关文章

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

MySQL中REPLACE函数与语句举例详解

《MySQL中REPLACE函数与语句举例详解》在MySQL中REPLACE函数是一个用于处理字符串的强大工具,它的主要功能是替换字符串中的某些子字符串,:本文主要介绍MySQL中REPLACE函... 目录一、REPLACE()函数语法:参数说明:功能说明:示例:二、REPLACE INTO语句语法:参数

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

python中update()函数的用法和一些例子

《python中update()函数的用法和一些例子》update()方法是字典对象的方法,用于将一个字典中的键值对更新到另一个字典中,:本文主要介绍python中update()函数的用法和一些... 目录前言用法注意事项示例示例 1: 使用另一个字典来更新示例 2: 使用可迭代对象来更新示例 3: 使用

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda