当前位置: 首页 > news >正文

纯前端实现图片上传七牛云

 首先安装下依赖:

npm install qiniu-js crypto-js

然后封装一下 uploaderHelper.ts 

import * as qiniu from 'qiniu-js';
// @ts-ignore
import CryptoJS from 'crypto-js'// 请求接口上传图片
export function uploadFile(file: File) {const uptoken = getToken('你的ak','你的sk','对应空间');const key = file.name;const config = {useCdnDomain: true,region: qiniu.region.z0,forceDirect: true // 是否上传全部采用直传方式};const putExtra: any = {fname: file.name,mimeType: ['image/png', 'image/jpeg', 'image/gif']};return qiniu.upload(file, key, uptoken, putExtra, config);
}
// eslint-disable-next-line camelcase
export default function getToken(access_key: string, secret_key: string, bucketname: string) {// 构造策略var putPolicy = {"scope": bucketname,"deadline": 3600 + Math.floor(Date.now() / 1000)}var encoded = base64Encode(utf16to8(JSON.stringify(putPolicy)));var hash = CryptoJS.HmacSHA1(encoded, secret_key);// 构造凭证var encodedSign = hash.toString(CryptoJS.enc.Base64).replace(/\//g, '_').replace(/\+/g, '-');// eslint-disable-next-line camelcasevar uploadToken = access_key + ':' + encodedSign + ':' + encoded;return uploadToken;
}
function base64Encode(str: string) {var out, i, len;var c1, c2, c3;len = str.length;i = 0;out = "";var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";while (i < len) {c1 = str.charCodeAt(i++) & 0xff;if (i === len) {out += base64EncodeChars.charAt(c1 >> 2);out += base64EncodeChars.charAt((c1 & 0x3) << 4);out += "==";break;}c2 = str.charCodeAt(i++);// eslint-disable-next-line eqeqeqif (i === len) {out += base64EncodeChars.charAt(c1 >> 2);out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));out += base64EncodeChars.charAt((c2 & 0xF) << 2);out += "=";break;}c3 = str.charCodeAt(i++);out += base64EncodeChars.charAt(c1 >> 2);out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));out += base64EncodeChars.charAt(c3 & 0x3F);}return out;
}
function utf16to8(str: string) {var out, i, len, c;out = "";len = str.length;for (i = 0; i < len; i++) {c = str.charCodeAt(i);if ((c >= 0x0001) && (c <= 0x007F)) {out += str.charAt(i);} else if (c > 0x07FF) {out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));} else {out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));}}return out;
}

然后对应上传图片的文件中引入该文件下的 uploadFile方法使用即可 ,使用方法如下:

uploadFile(files[0]).subscribe({next: (result) => {console.log(result)},error: (err) => {console.log(err)},complete: (e) => {//上传成功会返回数据console.log(e)}
});

http://www.lryc.cn/news/139545.html

相关文章:

  • win10+wsl2+Ubuntu20.2+Pycharm+WSL解释器
  • EL与JSTL
  • 【Linux】动态库和静态库
  • R语言:联合多指标的ROC曲线
  • 将一个树形结构的数据平铺成一个一维数组(vue3)
  • OSCS开源安全周报第 56 期:Apache Airflow Spark Provider 任意文件读取漏洞
  • CleanMyMac2024永久版Mac清理工具
  • 软考高级系统架构设计师(一)计算机硬件
  • bat文件中自定义cmd命令;执行完退出命令提示符窗口
  • 深度学习的经典算法的论文、解读和代码实现
  • 开源TTS+gtx1080+cuda11.7+conda+python3.9吊打百度TTS
  • 【私有GPT】CHATGLM-6B部署教程
  • 基于“R语言+遥感“水环境综合评价方法教程
  • To_Heart—题解——P6234 [eJOI2019] T形覆盖
  • [软件工具]精灵标注助手目标检测数据集格式转VOC或者yolo
  • Spring BeanName自动生成原理
  • 论文阅读_图形图像_U-NET
  • 基于热交换算法优化的BP神经网络(预测应用) - 附代码
  • 基于秃鹰算法优化的BP神经网络(预测应用) - 附代码
  • 2.文章复现《热电联产系统在区域综合能源系统中的定容选址研究》(附matlab程序)
  • 如何开启esxi主机的ssh远程连接
  • Android Studio实现解析HTML获取json,解析json图片URL,将URL存到list,进行瀑布流展示
  • Centos7 交叉编译QT5.9.9源码 AArch64架构
  • 爬虫逆向实战(二十)--某99网站登录
  • 【C# 基础精讲】LINQ to Objects查询
  • 【力扣】209. 长度最小的子数组 <滑动窗口>
  • 帮助中心应该用什么工具做?
  • 前端面试:【跨域与安全】跨域问题及解决方案
  • 【SQL中DDL DML DQL DCL所包含的命令】
  • LeetCode150道面试经典题-- 二叉树的最大深度(简单)