【Javascript】前端对文件进行md5计算再上传,以节省OSS云端存储空间

news2025/2/4 16:05:57

安装插件 browser-md5-file

browser-md5-file 用于计算文件md5,文档介绍较少,看看就能使用↓
在这里插入图片描述

使用例子

  1. 比如我用 el-upload 组件上传图片
 <el-upload
    action=""
    class="upload-box"
    :show-file-list="false"
    accept=".jpg,.jpeg,.png"
    :http-request="(rawFile:any) => uploadFileToOss(rawFile,index)"
  >
    <svg-icon name="upload" class="icon"></svg-icon>
  </el-upload>
  1. 对文件进行包装(这个主要看个人项目实际需要)
const uploadFileToOss = async (rawFile: any, index: number) => {
  const data = await uploadOss({
    name: rawFile.file.name,
    file: rawFile.file,
  });
  propsList.value[index][propsList.value[index].id] = data.url;
  ElMessage.success('上传成功');
};

  1. 上传文件到 OSS ,先处理文件——>获取签名——>最后上传到 oss
import BMF from 'browser-md5-file'; // 用于计算文件md5:https://www.npmjs.com/package/browser-md5-file

type File = any;
type OssConfig = {
  accessid: string | Blob;
  policy: string | Blob;
  signature: string | Blob;
  key: string | Blob;
  host: any;
};
type OnUploadProgress = (progressEvent: any) => void;

// 上传文件到OSS
export async function uploadOss(
  file: File,
  onUploadProgress?: OnUploadProgress,
  ossUrl?: string,
) {
  if (!file) {
    return null;
  }
  // 对文件进行md5计算,节省云端存储空间
  const bmf = new BMF();
  const md5 = await new Promise((resolve, reject) => {
    bmf.md5(
      file.file,
      (err: any, md5: string) => {
        if (err) {
          reject(err);
        }
        resolve(md5);
      },
      (progress: number) => {
        console.log('progress number:', progress);
      },
    );
  });
  const name = file.name;
  const suffix = name.substring(name.lastIndexOf('.'), name.length);
  // 文件路径: xxx/文件md5值.文件后缀
  const filePath = `xxx/${md5}${suffix}`;
  // 1.获取OSS签名
  let r = await getOssSignature(filePath, ossUrl);
  // 2.开始上传文件到OSS
  await uploadStart(file.file, r.data, onUploadProgress);
  return r.data;
}

// 获取OSS签名
async function getOssSignature(filePath: any, ossUrl: any) {
  ossUrl = ossUrl ? ossUrl : '/xxx/xxx';
  let res = await request({
    url: ossUrl,
    method: 'get',
    params: { filePath },
  });
  return res;
}

// 上传文件开始准备
async function uploadStart(
  file: File,
  ossConfig: OssConfig,
  onUploadProgress?: OnUploadProgress,
) {
  // 组装发送数据
  let formData = new FormData();
  formData.append('OSSAccessKeyId', ossConfig.accessid); // Bucket
  // 拥有者的Access
  // Key Id。
  formData.append('policy', ossConfig.policy); // policy规定了请求的表单域的合法性
  formData.append('signature', ossConfig.signature); // 根据Access Key
  // Secret和policy计算的签名信息,OSS验证该签名信息从而验证该Post请求的合法性
  // ---以上都是阿里的认证策略
  formData.append('key', ossConfig.key); // 文件名字,可设置路径
  formData.append('success_action_status', '200'); // 让服务端返回200,不然,默认会返回204
  formData.append('file', file); // 需要上传的文件 file
  let data = await request({
    url: ossConfig.host,
    method: 'post',
    data: formData,
    headers: { 'Content-Type': 'multipart/form-data' },
    onUploadProgress: onUploadProgress,
    withCredentials: false,
  });
  return data;
}

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

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

相关文章

找回删除的MP3文件不再难,这三种方法让你轻松应对

在数字时代&#xff0c;我们常常将歌曲、照片和文档等重要数据存储在电脑或移动设备中。然而&#xff0c;有时我们会不小心删错了文件&#xff0c;比如误删了一首喜欢的MP3歌曲。这时&#xff0c;如何恢复这些被误删除的文件就变得至关重要。本文将介绍一些常见的方法和技巧&am…

labview 弹窗(子vi)

如果你遇到了需要在主vi运行时需要弹窗某个窗口(或者称为子vi,子画面)&#xff0c;而且要主画面和子画面能独立运行各自的循环程序&#xff0c;本文能给你帮助。 本文的精髓在于: wait until Donefalse,表示子VI运行的同时&#xff0c;主vi也继续运行后面的代码&#xff0c;主…

Devops7实验环境搭建(terraform-kind-k8s-argocd)

Devops7实验环境搭建(terraform-kind-k8s-argocd) 目录 实验环境 操作系统&#xff1a; CentOS8 Linux &#xff08;我本次用centos7.6&#xff09; 内存资源&#xff1a;32GB &#xff08;自己nuc机器32G内存&#xff09; 实验软件版本&#xff1a; 工具名称Version描述信息…

【正点原子STM32连载】第五十八章 T9拼音输入法实验摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html# 第五…

Kubernetes - HPA-VPA - metrics介绍和安装 - HPA实验

目录 参考文章&#xff1a;(97条消息) Kubernetes-自动扩展器HPA、VPA、CA_hpa vpa_SRE运维充电站的博客-CSDN博客 HPA VPA 官方网址&#xff1a;autoscaler/vertical-pod-autoscaler at master kubernetes/autoscaler GitHub HPA和VPA进行扩缩容的区别&#xff1a; me…

绿水青山,节水护水我先行

为了树立人人珍惜水&#xff0c;人人节约水的良好风尚 绿萝志愿团队在7月16日在常庄刺猬河开展了2023年卫生环保志愿活动主要项目是宣传节水&#xff0c;护水志愿活动。 早上志愿者们早早的来到刺猬河旁&#xff0c;用自己带的工具准备清理河道旁的垃圾。志愿者们顶着炎炎的烈日…

Servlet 开发技术

文章目录 前言创建Servlet项目处理请求并响应处理请求text/plain&#xff0c;纯文本text/html&#xff0c;html代码application/json&#xff0c;JSON格式字符串 Servlet 生命周期Servlet在整个生命周期中被调用的方法Servlet运行原理 CORS跨域设置 前言 提示&#xff1a;这里…

rust的cargo和基本数据类型

一、cargo 1、cargo 比较大的项目就不适合用rustc进行编译了&#xff0c;此时就需要使用cargo 在安装包的时候&#xff0c;会遇到网速慢卡住的问题&#xff0c;这时候就要更换国内源或者设置代理 方法一&#xff1a;设置命令行代理 方法二&#xff1a;换源 进入用户目录下的…

linux 安装redis、配置密码及简单使用

1&#xff1a;官网下载压缩包 这里我下载的是6.2.13版本。 2&#xff1a;上传到linux服务器 a:创建redis文件夹 b:进入当前redis文件夹 c:解压缩文件 d:进入 redis-6.2.713 e:使用make 命令进行编译将.c文件编译成.o文件 编译成功之后会出现“Its a good idea to run make test…

微信原生实现一个简易的图片上传功能

一、实现原理 wx.showActionSheet()&#xff1a;显示操作菜单&#xff0c;选择是从相册选择还是相机拍摄照片wx.chooseImage()&#xff1a;从本地相册选择图片或使用相机拍照。wx.uploadFile()&#xff1a;将本地资源上传到服务器。客户端发起一个 HTTPS POST 请求&#xff0c…

在自定义数据集上微调Alpaca和LLaMA

本文将介绍使用LoRa在本地机器上微调Alpaca和LLaMA&#xff0c;我们将介绍在特定数据集上对Alpaca LoRa进行微调的整个过程&#xff0c;本文将涵盖数据处理、模型训练和使用流行的自然语言处理库(如Transformers和hugs Face)进行评估。此外还将介绍如何使用grado应用程序部署和…

分型(一)

一点想法&#xff1a; 坐标系本来就是人头脑当中的东西&#xff0c;可以根据需要动态调整&#xff0c;图像处理中&#xff0c;用动态的波看静态的图像&#xff0c;进而找出图像的特征&#xff0c;分型是不是把动态的过程呈现出静态的特征呢&#xff1f; 芒德布罗集&#xff1…

Python(十五)数据类型——bool型

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

【动手学深度学习】--08.实战:Kaggle房价预测

文章目录 实战&#xff1a;Kaggle房价预测1.访问和读取数据集2.数据预处理2.1标准化数据2.2离散数据处理 3.训练4.K折交叉验证5.模型选择 实战&#xff1a;Kaggle房价预测 1.访问和读取数据集 # 如果没有安装pandas&#xff0c;请取消下一行的注释 # !pip install pandas%matp…

华为云CodeArts产品体验的心得体会及想法

文章目录 前言CodeArts 的产品优势一站式软件开发生产线研发安全Built-In华为多年研发实践能力及规范外溢高质高效敏捷交付 功能特性说明体验感受问题描述完结 前言 华为云作为一家全球领先的云计算服务提供商&#xff0c;致力于为企业和个人用户提供高效、安全、可靠的云服务。…

基于SpringBoot+vue的在线答疑系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

《实战AI低代码》:普元智能化低代码开发平台发布,结合专有模型大幅提升软件生产力

在7月6日举办的“低代码+AI”产品战略发布会上,普元智能化低代码开发平台正式发布。该平台融合了普元自主研发的专有模型,同时也接入了多款AI大模型的功能。它提供了一系列低代码产品,包括中间件、业务分析、应用开发、数据中台和业务流程自动化等,旨在简化企业的复杂软件生…

Linux网络基础 — 传输层

目录 再谈端口号 端口号范围划分 认识知名端口号 netstat pidof UDP协议 UDP协议端格式 UDP的特点 面向数据报 UDP的缓冲区 UDP使用注意事项 基于UDP的应用层协议 TCP协议 TCP协议段格式 几个问题&#xff1a; 确认应答(ACK)机制 6个标记位 超时重传机制 连接…

rust 引用怎么用

本来好好的引用&#xff0c;被 rust 玩坏了&#xff0c;搞得自己都不会使用引用了&#xff0c;我们还是从简单的例子入手&#xff0c;来探索使用引用可能遇到额问题。 下面的示例代码编译不通过&#xff0c;在 s1 赋值给变量 s2 的过程中&#xff0c;字符串 neojos 值的所有权…

webGPT浏览器安装

edge点击“获取” https://microsoftedge.microsoft.com/addons/detail/wetab%E5%85%8D%E8%B4%B9chatgpt%E6%96%B0%E6%A0%87%E7%AD%BE%E9%A1%B5/bpelnogcookhocnaokfpoeinibimbeff?utm_sourceSteamDB # 其他浏览器安装教程如下&#xff1a; https://www.wetab.link/