uniapp小程序上传oss

uniapp上传小程序代码

import crypto from 'crypto-js';
import { Base64 } from 'js-base64/base64.js';
// 计算oss签名。
function computeSignature(accessKeySecret, canonicalString) {return crypto.enc.Base64.stringify(crypto.HmacSHA1(canonicalString, accessKeySecret));
}
const getPolicyBase64 = function () {let date = new Date();date.setHours(date.getHours() + '87600');let expiration = date.toISOString();const policyText = {"expiration": expiration, //设置该Policy的失效时间"conditions": [["content-length-range", 0, 1024 * 1024 * 1024 * 5] // 设置上传文件的大小限制, 5G]};const policyBase64 = Base64.encode(JSON.stringify(policyText));return policyBase64;
}/*** 获取oss签名*/
export const getOssAuthorization = (callback) => {request({url: `xxxxx`,method: 'get',}).then((res) => {// 返回参数// {//   accessKeyId: "",//   accessKeySecret: "",//   bucket: '',//   bucketName: "", 桶名//   callback: null,//   dir: "",//   endpoint: "https://oss-cn-xxxx.aliyuncs.com",//   keyName: "",//   osBasicInfo: "",//   path: '',//   region: "",//   response: '',//   securityToken: ''// }callback && callback(res.data)})
};
/*** * @param {string} filePath 文件的路径* @param {string} fileSize 文件的大小* @param {string} fileSuffix 文件后后缀* @param {string} fileName 文件夹名* @param {*} param* @returns */
export const ossUploadFile = (filePath, fileSize, fileSuffix = '', fileName) => {return new Promise((resolve, reject) => {if (!filePath) {uni.showModal({ title: '文件错误', content: '请重试', showCancel: false });uni.hideLoading();return false;}getOssAuthorization(async(data) => {// 这里指定上传的文件名const aliyunFileKey = `${data.dir}${fileName}`;// 拼接上传的oss地址let str = 'https://'const aliyunServerURL = data.endpoint.replace(str, `${str}${data.bucketName}.`);// 密钥const accessKeyId = data.accessKeyId;// 超时的时间const policyBase64 = getPolicyBase64();// 临时证书const signature = computeSignature(data.accessKeySecret, policyBase64);uni.uploadFile({url: aliyunServerURL, // 上传的域名filePath: filePath, // 上传的文件name: "file",formData: {key: aliyunFileKey, // 文件名称policy: policyBase64, // 过期时间OSSAccessKeyId: accessKeyId, // 秘钥signature: signature, // 临时证书success_action_status: "200","x-oss-security-token": data.securityToken},success: (res) => {console.log("成功回调", res)if (res.statusCode == 200) {let result = aliyunServerURL + "/" + aliyunFileKeyconsole.log(result, '====文件地址');resolve(result)} else {reject(res)}},fail: (err) => {console.log(err, 'err==上传失败');err.wxaddinfo = aliyunServerURLreject(err)},})})});
}

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

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

相关文章

#数据结构 线性表的顺序存储

目录 每日文案 一、线性表的定义 二、线性表的操作 顺序表的存储结构 顺序表的初始化操作 判断顺序表是否为空表 将顺序表置为空表 计算顺序表中的元素个数 取出顺序表中的对应位置元素 取出对应数值的位序 在对应位置插入元素 将对应位置的元素删除 将顺序表中的数据…

1.Python数据分析—数据分析与挖掘详讲

1.Python数据分析—数据分析与挖掘详讲 一个人简介二数据分析与挖掘概述三什么是数据分析和挖掘四数据分析与挖掘在不同领域的应用4.1医疗领域:4.1.1 建立疾病数据库:4.1.2 临床决策支持:4.1.3 疾病预警和监控: 4.2 电子商务领域&…

Linux下platform驱动框架编写

一. 简介 前面一篇文章简单学习了 Linux内核中platform驱动代码。文章地址如下: Linux下platform驱动简介-CSDN博客 本文学习编写 platform驱动框架代码。 二. Linux下platform驱动框架编写 1. 编写platform驱动代码的思路 (1) 定义结…

第12章 指针

以下内容是学习尚硅谷 12.1 指针基本介绍 1)指针是C语言的精华,也是C语言的难点 2)指针,也就是内存的地址;所谓指针变量,也就是保存了内存地址的变量。关于指针的基本使用,在讲变量的时候做了…

WAPI模块AT指令驱动

一、前言 由于项目更迭,需要将原4G模块更换为国内的WAPI协议模块,主控芯片NRF52840无需改动其他部分,只需要将串口部分的数据格式稍作更改即可。 编程风格和之前的esp8266一致,同样都是AT指令来配置模块,由于主…

Java封装的优点

目录 提高代码可维护性 降低耦合度 保护数据安全性 封装如何提高安全性 数据隐藏 访问控制 限制接口 错误隔离

请解释Redis是什么?它有哪些主要应用场景?Redis支持哪些数据类型?并描述每种数据类型的特性和使用场景。

请解释Redis是什么?它有哪些主要应用场景? Redis是一款内存高速缓存NoSQL数据库,使用C语言编写,它支持丰富的数据类型,如String、list、set、zset、hash等,并且这些数据类型都直接支持数据的原子性操作&…

d2-crud-plus 使用小技巧(四)—— 搜索限制只能输入数字

需求 搜索时有些字段需要限制,比如只能输入数字,不能存在其他字符包括空格。 效果 事情焦点后先触发校验,在触发查询。 代码 crud.js export const crudOptions (vm) > {return {columns: [{title: 号码,key: number,search: { //…

比Let‘s Encrypt更简单更齐全的免费证书申请教程

步骤一 打开JoySSL官网,注册属于你的专属账号; 永久免费SSL证书申请地址真正完全且永久免费!不用您花一分钱,SSL证书免费使用90天,并且还支持连续签发。JoySSL携手全球权威可信顶级根,自研新一代SSL证书&…

打zip包,支持有空文件夹

支持有空文件夹 // 打包String url dir0 File.separator dir1;log.info("将此文件夹打成zip包:"url);String urlZip dir0 File.separator dir1 ".zip";File file new File(url);// 方法2:压缩包内支持空文件夹ZipUtil.zip(F…

【汇编】#3 8086与数据有关的寻址方式

文章目录 操作码与操作数1. 8086处理器的与数据有关的寻址方式1.1 立即数寻址方式1.2 寄存器寻址方式 2. 有效(偏移)地址(effective address,EA)与缺省段寄存器选择tips:段跨越前缀2.1 直接寻址tips:直接寻址与立即寻址…

GitOps实践之Argo CD (2)

argocd 【-1】argocd可以解决什么问题? helm 部署是手动的?依赖流水线。而有时候仅仅更新一个小东西,流水线跑好久,CD真的不应该和CI耦合。不同环境的helm配置不同,手动修改问题多,可以用git管理起来,例如分不同环境用目录区分。argocd创建应用可以不通环境部署到不同集…

Seata 2.x 系列【12】高可用集群部署

有道无术,术尚可求,有术无道,止于术。 本系列Seata 版本 2.0.0 本系列Spring Boot 版本 3.2.0 本系列Spring Cloud 版本 2023.0.0 源码地址:https://gitee.com/pearl-organization/study-seata-demo 文章目录 1. 概述2. 搭建演…

Linux下新增有root权限的用户

步骤: 1.以 root 用户身份登录到 CentOS 服务器。 2.使用以下命令创建新用户(将 newuser 替换为您想要创建的用户名): sudo adduser username 3.为新用户设置密码: sudo passwd username 按照提示输入新增用户密码 …

计算机基础1-汇编基础

汇编语言是一种低级的计算机语言,它直接与计算机硬件进行交互。在汇编语言中,指令由一系列助记符(mnemonic)组成,用于执行特定的操作,如数据传输、算术运算和控制流程等。每个指令都对应着一条机器码&#…

《数据安全法》关于数据出境的条款

《数据安全法》关于数据出境的条款 《中华人民共和国数据安全法》于2021年6月10日通过,2021年9月1日起实施)。 在《数据安全法》中,第三十一条:“关键信息基础设施的运营者在中华人民共和国境内运营中收集和产生的重要数据的出境…

Golang如何使用命令行-- flag库

参考文献: flag package - flag - Go Packages 使用: import "flag" var nFlag flag.Int("n", 1234, "help message for flag n") 上述方法返回的是一个指针变量nFlag,如果我们要打印,应该使用…

声卡喊话IP喇叭,IP网络吸顶天花喇叭

声卡喊话IP喇叭,IP网络吸顶天花喇叭 SV-7043VP是一款ip/sip网络吸顶喇叭,具有10/100M以太网接口,从网络接口接收网络的音频数据后播放。本网络吸顶喇叭可以与其他广播主机、服务器软件和采播主机配合使用,实现音频的播放&#xf…

大语言模型:Query Rewriting for Retrieval-Augmented Large Language Models

总体思路 作者首先指出大语言模型虽然取得了很好的效果,但是仍然存在幻觉和时间顺序混乱的问题,因此需要额外知识库和LLM内部知识库相结合,来修正;因此优化传统的retriever-reader的方案成为需要;目前的研究方案当中使…

log4cplus在Qt linux中的应用与问题解决

log4cplus在Qt linux中的应用与问题解决 背景log4cplus下载遇到问题:libm.so.6:undefined reference to __strtof128_nanGLIBC_PRIVATE‘解决方案编译生成在Qt工程里面添加对应依赖编译运行成功 背景 最近工作中需要用到log4cplus的日志做一些记录,用了…