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

javascript:实现md5算法(附完整源码) 阅读详情

安装插件 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;
}
前端vue js 使用插件 spark-md5 计算文件MD5值并封装成Promise异步调用方法 摘要:本文介绍了使用spark-md5库计算文件MD5值的方法。首先通过npm安装该库,然后采用分块读取策略(2MB/块)处理大文件,利用FileReader读取文件片段,通过SparkMD5计算哈希值。代码实现了异步Promise处理,包含错误回调机制,最终返回完整的MD5值。该方法有效解决了大文件MD5计算的内存问题,提升了计算效率。 阅读详情

相关推荐

【信息科学与工程学】计算机科学与自动化——第一百五十五篇 缓存系统设计03

编号366-380共15个条目,涵盖了SQL/NoSQL数据库、小文件、对象、向量、CDN、应用框架等各类数据对CPU、GPU、ASIC、FPGA、NPU、内存、SSD、HDD、RAID卡、操作系统、Redis、容器、MPP数据库、CDN等缓存硬件和软件的配置需求。:mark_cache_size,uncompressed_cache_size,merge_tree配置。:调整vm.dirty_ratio,增大vfs_cache_pressure,启用透明大页。

weixin_49199313的博客 226

前端大文件分块上传及计算大文件MD5值

本文主要讲解文件的MD5值计算及上传逻辑。大致思路:在选择文件获取到文件之后,首先是对文件进行MD5值的计算,然后拿着这个MD5值对查询后端接口此文件是否存在。查询结果分为三种情况,一是不存在,二是已存在,三是部分存在。不存在时对文件分块,然后一块一块上传;已存在时直接使用已存储的文件,即秒传;部分存在时后端会返回不存在的文件块的位置,然后上传对应不存在的块。

专注前端技术,包括Web端、移动端、小程序、APP 4019

【信息科学与工程学】计算机科学与自动化——第八十一篇 Java分布式软件高并发/高可用算法01

4. 消息队列(如Kafka的Topic分区,本质是范围)。3. 若是ACCEPT事件,bossGroup线程接受连接,创建SocketChannel,并将其注册到workerGroup的一个EventLoop的Selector上,关注READ事件。1. 分布式缓存分片(如Redis Cluster)。4. 分布式文件存储(如Ceph CRUSH)。6. 调用栈的模拟(如协程)。3. 服务网格(如Istio)的基础。2. 本地缓存与集中式缓存(如Redis)的一致性维护。3. 静态数据(如配置)缓存。

weixin_49199313的博客 1223

在浏览器端获取文件的MD5值

http://www.jianshu.com/p/940a9226fbbd 前几天接到一个奇怪的需求,要在web页面中计算文件的md5值,还好这个项目是只需兼容现代浏览器的,不然要坑死了。 其实对文件进行md5,对于后端来说是及其简单的。比如使用Node.js,只要下面几行代码就可以了: var fs= require('fs'); var cr...

weixin_30632883的博客 1333

基于PHP构建多端聚合云盘系统:架构设计与核心功能实现

云存储是现代应用开发中的基础技术,它通过将数据托管在远程服务器上,实现了数据的集中管理和多端访问。其核心原理在于利用网络协议和API接口,将文件存储、读取等操作抽象为服务。这项技术的价值在于提供了弹性扩展、高可用性和成本优化的数据管理方案,广泛应用于企业网盘、内容分发和备份归档等场景。本文聚焦于如何基于PHP技术栈,实现一个自托管的多端聚合云盘系统,其中涉及存储适配器设计、文件秒传机制等关键工程实践,并深入探讨了利用Laravel框架的服务容器进行依赖注入,以统一管理对接阿里云OSS、腾讯云COS等不同云存

weixin_42453228的博客 261

browser-md5-file-1.0.0.zip

包括了browser-md5-file.min.js 和browser-md5-file.js,可以在客户端查看文件的md5值

Spring Boot文件存储框架设计:统一API实现多平台文件上传下载

文件存储是Web应用开发中的基础技术组件,其核心原理是通过抽象层将业务逻辑与存储实现解耦。在Java生态中,基于Spring Boot的文件存储框架采用面向接口编程和策略模式,为开发者提供了一套统一的API,从而实现对本地磁盘、FTP及各大云对象存储服务的无缝操作。这一设计的技术价值在于显著提升开发效率、降低系统耦合度,并增强可扩展性。在实际应用场景中,此类框架需处理文件上传的前置校验、分片上传、下载方式控制以及存储生命周期管理等工程实践问题。通过整合Spring File Storage等方案,开发者能够

weixin_34008933的博客 418

HyperMesh二次开发实战:自动化Comp与材料属性批量绑定

本文详细介绍了HyperMesh二次开发中自动化Comp与材料属性批量绑定的实战技巧。通过TCL脚本实现批量创建属性卡、智能材料分配和异常处理,大幅提升前处理效率,适用于汽车、航空航天等领域的复杂模型处理。

weixin_29214691的博客 690

Python自动化部署:从本地构建到云存储的完整流水线实践

自动化部署是现代软件开发流程中的关键技术环节,它通过脚本化操作将本地构建产物可靠地同步到云端存储。其核心原理在于将版本控制、依赖管理、构建打包、安全认证和文件传输等环节串联成标准化流水线,确保每次部署的一致性和可追溯性。在工程实践中,结合Git进行版本标识,利用对象存储服务(如阿里云OSS、腾讯云COS)的API实现安全传输,并通过MD5校验保障文件完整性,能够显著提升团队协作效率和部署可靠性。本文以Python脚本为例,详细演示如何构建一个包含环境检查、构建触发、云存储上传和结果验证的完整自动化上传流程,

weixin_30642869的博客 336

计算机组成原理课程设计_微程序控制的简单模型机设计

微程序控制的简单模型机设计 要求 基本要求 完成一个简单主机的设计,模型机应具备如下能力:在自行设计的指令集基础上,运行自行编写的简单用户程序,实现特定运算功能。 弹性要求 在此基础上,完成必要的扩展,实现模型机的功能扩展设计,包括:实现多种运算功能(指令集的扩充)、支持更为丰富的寻址方式、有更为完善的微程序设计等。 实验软件和硬件环境 QuartusII, FPGA计算机组...

sailist的记录站 3万+

从多项式到神经网络:DPD算法演进史及其在RRU中的工程实现

本文系统梳理了数字预失真(DPD)算法从经典多项式模型、查表法到神经网络驱动的演进历程,并深入探讨了其在基站射频单元(RRU)中面临的硬件资源约束与工程实现挑战。文章为通信设备的技术决策者提供了算法选型、性能权衡及混合架构设计的实用评估框架,助力在性能、功耗与成本间找到最优平衡。

cherry的博客 1075

AI赋能在线编辑器:智能图片上传与处理全链路实现

在现代Web开发中,文件上传是构建富媒体应用的基础功能。其原理通常涉及前端通过HTML5 File API捕获用户文件,后端通过HTTP协议接收并存储。随着AI技术的发展,传统的上传功能被赋予了新的价值,即通过集成图像识别、内容审核等AI模型,实现图片的智能处理与自动化管理。这一技术融合极大地提升了内容生产效率和平台智能化水平,尤其适用于博客系统、内容管理后台等需要高效处理用户生成内容的场景。本文聚焦于如何将AI能力无缝集成到在线编辑器的上传流程中,通过具体的技术选型、前后端实现和性能优化方案,构建一个从上

weixin_30387799的博客 334

ISP-全局色调映射(GTM)算法简单实现

色调映射算法,色彩空间转换LAB

notgoodenouf的博客 2238

对象存储访问管理

对象存储是一种以对象为中心的存储方式,将数据存储为对象而不是文件,在对象存储中,每个对象都有唯一的标识符,这个标识符是由系统自动生成的。与传统文件系统不同,对象存储中不需要使用文件夹或路径来查找对象,只需要使用对象的标识符即可。它具有高度可靠性、高扩展性和高性能等优点。对象存储作为一种低成本,近似无限容量的存储服务,在海量,异构存储方面应用广泛,各云厂商也都已上线各自的对象存储产品。移动云的对象存储 产品叫EOS(Elastic Object Storage),是移动云为客户提供的一种海量空间。

企业实战系列集 ●●● https://ximenjianxue.blog.youkuaiyun.com 2495

用SimaPro做碳足迹分析:手把手教你完成产品生命周期评估报告

本文详细介绍了如何使用SimaPro进行碳足迹分析,从软件安装到生命周期评估报告的完整流程。通过实战案例演示,帮助制造业企业、咨询机构和科研团队掌握产品生命周期评估(LCA)的核心技术,精准识别环境热点并优化决策,为可持续发展转型提供科学依据。

yhn45678901的博客 712

【超详细】计算机操作系统总结及思维导图(汤子瀛版)

计算机操作系统 一.操作系统引论 1.操作系统的目标和功能 目标 方便性 有效性 提高系统资源利用率 提高系统吞吐量 可扩充性 开放性 作用 OS作为用户与计算机硬件系统之间的接口 命令方式 系统调用方式 图标–窗口方式 OS实现了对计算机资源的抽象 2.操作系统的发展过程 未配置操作系统的计算机系统 人工操作方式 用户独占全机 CPU等待人工操作 严重降低...

圣三一 2万+

HTML加js实现计算文件哈希值,前端使用js计算文件的MD5值

在前端开发时有时需要计算文件的 MD5 值传给后端用作比较文件的准确性和完整性。还应用到了现代浏览器中都实现了的类 FileReader,它的实例的 readAsBinaryString 方法,用来读取文件的原始二进制数据。创建HTML部分并引入插件计算小文件的MD5值document.querySelector('#file').addEventListener('change', e =&gt...

weixin_33205735的博客 2074

可编程逻辑控制器(PLC)系列:Mitsubishi MELSEC-Q_(8).MELSEC-Q系列PLC故障诊断与维护

MELSEC-Q系列PLC的故障诊断与维护是一个系统性的过程,需要工程师具备扎实的理论基础和丰富的实践经验。通过了解故障类型、使用诊断工具、遵循诊断步骤,可以有效地定位和解决故障问题。同时,定期的检查与保养、备份与恢复、优化程序和配置,以及提供良好的运行环境,可以减少故障的发生,提高系统的可靠性。希望本文能够帮助工程师在故障诊断与维护过程中更加得心应手,确保MELSEC-Q系列PLC的稳定运行。

2401_87715305的博客 1247

文件的MD5编码获取

获取文件的MD5值,可以用在上传文件的时候用作文件完整性的校验;其他的不多说,往下看看Java端和js端是如何实现的吧!! 一、java的处理方式 java获取文件的MD5值的方法都很像相似,其核心都是通过java自带的MessageDigest方法实现的;下面让我们一起看一下吧 1. 最原声的方法 public static String fileToMD51(String path) { ...

qq_35530330的博客 2071

开源Harness项目DeerFlow 2.0,让智能体几乎能完成任何复杂任务

从提示工程到上下文工程,再到如今的 Harness,这条演进路径的本质是从“教模型如何理解人类”迈向“为模型构建一个可执行、可信赖、可长期运转的数字世界”。 当越来越多像 DeerFlow 2.0 这样的 Super Agent Harness 走向普及,AI 将真正进化为能理解、会规划、可执行、敢交付、长期负责的成熟生产力形态。

技术引领业务创新 519

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

如何使用javascript计算文件的md5哈希值

然后,通过选择文件输入元素(input type=“file”)获取到上传的文件,并调用calculateFileMd5()函数来计算其MD5哈希值。最后,确保在HTML页面中有一个id为"fileInput"的文件输入元素,这样才能正常运行上述代码。要使用JavaScript计算文件的MD5哈希值,可以按照以下步骤进行操作。创建一个函数来读取并计算文件的MD5哈希值。// 当文件被成功读取时调用onload事件。// 计算MD5哈希值。// 开始读取文件内容。// 当文件改变时触发change事件。

weixin_44401744的博客 3603

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

前端计算md5值(仅记录)

md5值只根据文件内容改变,与文件名称及创建时间无关。

weixin_63132926的博客 798

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【亲测免费】 browser-md5-file 使用教程

browser-md5-file 使用教程 1. 项目介绍 browser-md5-file 是一个用于在浏览器端计算文件MD5值的JavaScript库。它基于 js-spark-md5 项目,提供了更简洁的API来处理文件的MD5计算。该库主要利用HTML5的File API将文件读取到内存中,然后计算其MD5值。由于使用了高效的MD5算法,browser-md5-file 能够快速计算文件的...

gitblog_00449的博客 665

js:spark-md5分片计算文件的md5值

分片读取文件,计算最终md5值。分片读取文件,并计算md5值。* 计算文件md5值。// 默认分片大小 2MB。

彭世瑜的博客 5726

vue+element-ui大文件的分片上传和断点续传js-spark-md5和browser-md5-file

http://www.javascriptcn.com/post/35682 https://github.com/satazor/js-spark-md5 vue+element-ui大文件的分片上传和断点续传js-spark-md5和browser-md5-file 注意:以下共两份代码片段,第一份为原博主链接代码,第二份自己写的整体代码(比较乱) 1.参考 https://www.cnblogs.com/kelelipeng/p/10158599.html (js-spark-md5和browser-

zhaoxin_1989的博客 1626

前端md5校验文件

前端获取文件的md5值,与文件一同传到后端,后端同样对md5值进行校验。如果相同,则文件未被损坏(其实这种方式优点类似于tcp、ip的差错校验,好像token也是这种方式)

weixin_42575028的博客 923
上一篇: 【JavaScript】JS 生成随机的十六进制颜色
下一篇: 【个人杂谈】假如我是一个前端工程师,我该如何在日常的学习过程中使用费曼学习法?
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值