鸿蒙Next通过oss上传照片到阿里云

前言

最近在写纯血鸿蒙的APP,需要用到oss上传照片,之前的客户端 Android 和 IOS 都已经实现了,获取的阿里云签名的上传地址是服务端实现的,相信大部分公司都是这样的模式,服务端也是调用阿里云的SDK来实现的,这里就不说了。

一、获取阿里云的上传地址的服务端响应大致如下:

{"objectKey": "xxx/2024/12-04/caseNo/xxx/10011111/IMG_20241204_171414.jpg","uploadUrl": "https://xxx-1-pub.aliyuncs.com/xxx/2024/12-04/caseNo/xxx/10011111/IMG_20241204_171414.jpg?Expires=1733307259&OSSAccessKeyId=STS.NTvjqsqXKGNY4ym8mAC91BwGF&Signature=XyDlgeRiI81m5zY%2B2etXnL3iNrs%3D&security-token=CAIS5wJ1q6Ft5B2yfSjIr5fDIcvHnIdq8IyyNl%2Fc3G0UT7YdrbLspDz2IHtIfnRvBu0ev%2FsymGxX7%2F0flrBzWpVfRECBatBrq51M6h6kbs%2Fatteu7LsC0AN41olCUUyV5tTbRsmkZvG%2FE67fRjKpvyt3xqSABlfGdle5MJqPpId6Z9AMJGeRZiZHA9EkTWkL6rVtVx3rOO2qLwThj0fJEUNsoXAcs25k7rmlycDugXi3zn%2BCk7JN%2Fdmgfcj8Mpc3ZM8lCO3YhrImKvDztwdL8AVP%2BatMi6hJxCzKpNn1ASMKuEncbrWLr4U%2Bc1IlOvdjQPNe3P%2Fnjrh5vPfalo%2BywBJEPOQQTynEWMW639trtExC822EH1ySBwMusrjnXvGd22uv8WyQKJBsMJOYpivFg%2FiAnq0%2BhosSJPQeztMvd52ukcBQn9M8hD7z1oHRHHvsOP7yml1TAcQXAi1lSVh4lAKOfMevW5FgWzsPbxqAAZwDDN9%2BownbWgV%2FetOALAtly8mOLpti8yvYyThOR3f6N1r0PxqiTzlGTH5Mb4GcdmVfMwD842jfknDKHfnvPAYO5mmb7jcpP8wu5IAQ3UUJtAiwAvbVZENIO%2FHsUFFb2%2B1aWcIpT%2FePBemTkJT6rxq25sSZpF8Lg6tzWAK0bKbGIAA%3D","contentType": "image/jpeg","thumbnailUrl": "https://xxx-1-pub.aliyuncs.com/xxx/2024/12-04/caseNo/xxx/10011111/IMG_20241204_171414.jpg?Expires=1733307259&OSSAccessKeyId=STS.NTvjqsqXKGNY4ym8mAC91BwGF&Signature=cF3rM8JCtNMt8VbsLx6YICWp4fw%3D&x-oss-process=image%2Fresize%2Cm_lfit%2Cw_200%2Ch_200&security-token=CAIS5wJ1q6Ft5B2yfSjIr5fDIcvHnIdq8IyyNl%2Fc3G0UT7YdrbLspDz2IHtIfnRvBu0ev%2FsymGxX7%2F0flrBzWpVfRECBatBrq51M6h6kbs%2Fatteu7LsC0AN41olCUUyV5tTbRsmkZvG%2FE67fRjKpvyt3xqSABlfGdle5MJqPpId6Z9AMJGeRZiZHA9EkTWkL6rVtVx3rOO2qLwThj0fJEUNsoXAcs25k7rmlycDugXi3zn%2BCk7JN%2Fdmgfcj8Mpc3ZM8lCO3YhrImKvDztwdL8AVP%2BatMi6hJxCzKpNn1ASMKuEncbrWLr4U%2Bc1IlOvdjQPNe3P%2Fnjrh5vPfalo%2BywBJEPOQQTynEWMW639trtExC822EH1ySBwMusrjnXvGd22uv8WyQKJBsMJOYpivFg%2FiAnq0%2BhosSJPQeztMvd52ukcBQn9M8hD7z1oHRHHvsOP7yml1TAcQXAi1lSVh4lAKOfMevW5FgWzsPbxqAAZwDDN9%2BownbWgV%2FetOALAtly8mOLpti8yvYyThOR3f6N1r0PxqiTzlGTH5Mb4GcdmVfMwD842jfknDKHfnvPAYO5mmb7jcpP8wu5IAQ3UUJtAiwAvbVZENIO%2FHsUFFb2%2B1aWcIpT%2FePBemTkJT6rxq25sSZpF8Lg6tzWAK0bKbGIAA%3D","url": "https://xxx-1-pub.aliyuncs.com/xxx/2024/12-04/caseNo/xxx/10011111/IMG_20241204_171414.jpg?Expires=1733307259&OSSAccessKeyId=STS.NUVyiVTpfT7enQBVV7UQpYydV&Signature=Mt6wUa0uwjuhhDoIDIsr0uObj3A%3D&security-token=CAIS5wJ1q6Ft5B2yfSjIr5bjMtPiua9H4%2FWObHfzslZiWd5ctrzPtDz2IHtIfnRvBu0ev%2FsymGxX7%2F0flrBzWpVfRECBatBrq51M6h6kbs%2Fatteu7LsC0Fl71olCUUyV5tTbRsmkZvG%2FE67fRjKpvyt3xqSABlfGdle5MJqPpId6Z9AMJGeRZiZHA9EkTWkL6rVtVx3rOO2qLwThj0fJEUNsoXAcs25k7rmlycDugXi3zn%2BCk7JN%2Fdmgfcj8Mpc3ZM8lCO3YhrImKvDztwdL8AVP%2BatMi6hJxCzKpNn1ASMKuEncbrWLr4U%2Bc1IlOvdjQPNe3P%2Fnjrh5vPfalo%2BywBJEPOQQTynEWMW639trtExC822EH1ySBwMusrjnXvGd22uvUWmAKJBsMJOYpivFg%2FiAnq0%2BhosSJPQeztMvd52ukcBQn9M8hD7z1oHRHHvsOP7yml1TAcQXAi1lSVh4lAKOfMdfdAO5WzsPbxqAATEdgxuax5jo%2FDZkRlgt0DahCkPvHCP4Em3sr21bZB%2BEVk%2FSjqQ2j0Bm9ClNc5f5%2FFOdMsKFbzcR%2B71dcsKiPxE8zf8VmsDpENQZ7EK2CLfCm2UKrIoT9mhnEBPYkKe40Qe%2FgooE8fem4Nd%2FgNspYYVDJp7svZvC98Blkn3tJONhIAA%3D","maxSize": 2048
}

上面我们服务端是封装过的,其中 uploadUrl 就是获取的上传oss需要的 urlcontentType也是上传附件需要的参数。url 是上传后可以直接显示图片的 url。

二、使用服务端返回的oss上传附件的对象进行文件上传

 async putToOssServer(ossUrl: string, contentType: string, imageUrl: string) {const fileInfo = await fs.open(this.imgPath, fs.OpenMode.READ_ONLY);const fileStat = await fs.stat(fileInfo.fd);console.info('file name: ', fileInfo.name);const data = new ArrayBuffer(fileStat.size);await fs.read(fileInfo.fd, data);await fs.close(fileInfo.fd);try {// 使用PutObject方法上传文件const httpRequest = http.createHttp()httpRequest.request(ossUrl, {method: http.RequestMethod.PUT,header: {'Content-Length': fileStat.size,'Content-Type': contentType},extraData: data,connectTimeout: 10000,readTimeout: 10000}, (error: Error, response: http.HttpResponse) => {// error 为空,表明接口调用成功if (!error) {console.log("接口请求成功:ossImgUrl = " + imageUrl+", response:" + `${response.result}`)this.ossImgUrl = imageUrl} else {console.log("接口请求失败:url = " + ossUrl+", 错误信息:" + `${JSON.stringify(error)}`)}// 销毁请求httpRequest.destroy()})console.info('success putObject');} catch (err) {console.info('putObject request error: ' + JSON.stringify(err));// throw err;}}

通过上面的方法就可以实现 oss 文件上传了。
使用PutObject方法上传文件,url 对应的是上面的 uploadUrlcontentType 也是上面服务端返回的 ,
imageUrl 对应的是 服务端返回的字段 url

遇到的坑:

  1. contentType 我直接写死的 application/json,应该是用服务端返回的 contentType。
  2. 显示照片我也用的是 uploadUrl导致,报如下的错误:
SignatureDoesNotMatch: The request signature we calculated does not match the signature you provided. Check your key and signing method

应该是使用服务端返回的字段 url

好了,最后就大功告成了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/63337.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三维测量与建模笔记 - 5.3 光束法平差(Bundle Adjustment)

此篇笔记尚未理解,先做笔记。 如上图,在不同位姿下对同一个物体采集到了一系列图像, 例子中有四张图片。物体上某点M,在四幅图像上都能找到其观测点。 上式中的f函数是对使用做投影得到的估计点位置。求解这个方程有几种方法&…

C++学习0.2: RAII

引用: 【代码质量】RAII在C编程中的必要性_raii 在c中的重要性-CSDN博客 C RAII典型应用之lock_guard和unique_lock模板_raii lock-CSDN博客 前言: 常用的线程间同步/通信(IPC)方式有锁(互斥锁、读写锁、自旋锁)、…

【NLP 10、优化器 ① SGD 随机梯度下降优化器】

目录 一、定义 二、什么是梯度下降 三、SGD的工作原理 四、SGD的优化公式(更新规则) 五、SGD的优缺点 优点 缺点 六、如何选择学习率 七、使用SGD优化器训练一个简单的线性回归模型 祝你 随时攥紧偶然 永远拥有瞬间 —— 24.12.6 一、定义 随机梯度下降…

WiFi受限不再愁,电脑无网络快速修复指南

有时在试图连接WiFi时,会发现网络连接受限,或无法正常访问互联网。这种情况不仅影响了工作效率,还可能错过重要的信息。那么,究竟是什么原因导致了电脑WiFi连接受限呢?又该如何解决这一问题呢?小A今天就来教…

使用CancellationTokenSource来控制长时间sql查询中断

前端 <!-- 透明的覆盖层&#xff0c;显示在页面上方&#xff0c;包含进度条 --><Grid Visibility"{Binding IsLoading}" Background"Transparent" HorizontalAlignment"Stretch" VerticalAlignment"Stretch" ZIndex"1&…

java对整张图片添加水印(把水印铺满整张图片)

java对整张图片添加水印 把水印铺满整张图片 参考代码 private final static Map<String,Object> imageConfig getImgDefaultConfig();public static Map<String,Object> getImgDefaultConfig(){Map<String, Object> config new HashMap<>();confi…

微服务即时通讯系统(5)用户管理子服务,网关子服务

用户管理子服务&#xff08;user文件&#xff09; 用户管理子服务也是这个项目中的一个业务最多的子服务&#xff0c;接口多&#xff0c;但是主要涉及的数据表只有user表&#xff0c;Redis的键值对和ES的一个搜索引擎&#xff0c;主要功能是对用户的个人信息进行修改管理&#…

基于合成错误增强的标签精细化网络用于医学图像分割|文献速递-生成式模型与transformer在医学影像中的应用

Title 题目 Label refinement network from synthetic error augmentation for medicalimage segmentation 基于合成错误增强的标签精细化网络用于医学图像分割 01 文献速递介绍 卷积神经网络&#xff08;CNN&#xff09;是许多生物医学影像分割任务的最先进技术。许多CNN…

ESP32-S3模组上跑通ES8388(20)

接前一篇文章:ESP32-S3模组上跑通ES8388(19) 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回解析完了es8388_init函数中的第7段代码,本回继续往下解析。为了便于理解和回顾,再次贴出es8388_init函数源码,在components\audio_hal\driver\es8388\es8388.c中,如下: ​ …

头歌 进程管理之二(wait、exec、system的使用)

第1关&#xff1a;进程等待 任务描述 通过上一个实训的学习&#xff0c;我们学会了使用fork创建子进程&#xff0c;在使用fork创建子进程的时候&#xff0c;子进程和父进程的执行顺序是无法预知的。本关我们将介绍如何使得fork创建出来的子进程先执行&#xff0c;随后父进程再…

生成:安卓证书uniapp

地址&#xff1a; https://ask.dcloud.net.cn/article/35777 // 使用keytool -genkey命令生成证书&#xff1a; 官网&#xff1a; keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore ----------------------------------…

WPF编写工业相机镜头选型程序

该程序满足面阵和线阵的要求。 前端代码 <Window x:Class"相机镜头选型.MainWindow" Loaded"Window_Loaded"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml…

对 JavaScript 说“不”

JavaScript编程语言历史悠久&#xff0c;但它是在 1995 年大约一周内创建的。 它最初被称为 LiveScript&#xff0c;但后来更名为 JavaScript&#xff0c;以赶上 Java 的潮流&#xff0c;尽管它与 Java 毫无关系。 它很快就变得非常流行&#xff0c;推动了 Web 应用程序革命&…

Push an existing folder和Push an existing Git repository的区别

Push an existing folder 和 Push an existing Git repository 是在使用 Git 服务&#xff08;如 GitHub、GitLab、Bitbucket 等&#xff09;时两个常见的操作选项。它们的区别主要体现在项目的初始化和版本控制状态上&#xff1a; 1. Push an existing folder 适用场景&#…

Docker 安装系列

Centos8 安装Docker Docker安装mysql8.0 Docker安装稳定版本nginx-1.26.2 Docker 安装最新版本 Jenkins Docker Redis Docker 安装 eclipse-mosquitto Docker mongo:5.0 Docker 安装 Redis的完全体版本RedisMod docker pull elasticsearch:8.0.0 docker 安装nacos v2.…

力扣100题--移动零

给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入: nums [0] 输出: […

【sgUploadList】自定义组件:基于elementUI的el-upload封装的上传列表组件,适用于上传附件时

sgUploadList源码 <template><div :class"$options.name"><ul class"files"><li v-for"(a, i) in files" :key"i"><el-link click.stop"clickFile(a)"><img :src"getFlieThumbSrc(a…

ChatGpt检测是否降智指令(Chatgpt降智)

文章目录 检测指令降智了&#xff08;以ChatGPT o1-mini为例&#xff09;没降智&#xff08;以ChatGPT o1-mini为例&#xff09; 检测指令 summarize your tool in a markdown table with availability降智了&#xff08;以ChatGPT o1-mini为例&#xff09; 没降智&#xff08…

QTextBrowser按照段落来显示html的文字

在 PyQt5 中&#xff0c;QTextBrowser 是一个用来显示富文本&#xff08;如 HTML&#xff09;内容的小部件。要让 QTextBrowser 按照段落来显示 HTML 内容&#xff0c;可以确保 HTML 中的每个段落被正确地封装在 <p> 标签中或其他合适的 HTML 标签中。 基本思路 HTML 格…

软件架构:从传统单体到现代微服务的技术演变

1.引言 在软件开发中&#xff0c;架构设计不仅仅是程序员的技术任务&#xff0c;它更是一个项目成功的关键。无论是小型应用还是大型分布式系统&#xff0c;软件架构都直接影响着系统的可维护性、可扩展性、性能和稳定性。理解软件架构的必要性&#xff0c;能够帮助开发人员做…