javaScript前端文件一致性校验-md5方法

 需求背景:在处理文件上传时使用了第三方平台存储,后端在下载时需要校验与文件与上传时是否一致,已校验文件是否丢失的问题。如我们公司业务场景使用了分段上传,分段上传如果没有校验合并后的文件是否完整,可能会存在部分数据丢失

处理文件的唯一性可以通过计算文件的MD5值来实现,前端和后端都可以进行相同的计算以进行对比。下面是一个处理Vue视频上传并计算MD5值的示例:

在前端(Vue):

在上传视频之前,使用JavaScript的File API读取文件内容。

使用JavaScript的crypto.subtle.digest()方法计算文件的MD5值。

将计算得到的MD5值发送到后端。

示例代码如下:

安装crypto-js库:

npm install crypto-js

 计算MD5

import { MD5 } from 'crypto-js';// 读取文件内容并计算MD5值const file = event.target.files[0];const reader = new FileReader();reader.onload = (event) => {const fileData = event.target.result;const fileMD5 = MD5(fileData).toString();// 将fileMD5发送到后端};reader.readAsArrayBuffer(file);

在后端(假设使用Node.js):

接收前端发送的文件和MD5值。

使用相同的MD5计算算法计算接收到的文件的MD5值。

将计算得到的MD5值与前端发送的MD5值进行比较,判断文件是否唯一。

示例代码如下:

// 安装crypto库:npm install crypto

const crypto = require('crypto');// 接收文件和前端发送的MD5值const receivedFile = req.file; // 假设使用了multer等文件上传中间件const receivedMD5 = req.body.md5; // 假设通过请求体传递MD5值// 计算接收到的文件的MD5值const fileData = fs.readFileSync(receivedFile.path);const calculatedMD5 = crypto.createHash('md5').update(fileData).digest('hex');// 判断文件的唯一性const isUnique = (calculatedMD5 === receivedMD5);

通过以上步骤,可以在前端和后端都计算文件的MD5值,并判断文件是否唯一。需要注意的是,这只是一种简单的判断文件唯一性的方法,如果您有更高的安全要求,可以考虑使用其他的哈希算法或加密方法。

  •  Hash方法用于将输入数据转换为固定长度的哈希值。在处理文件的唯一性时,可以使用哈希方法来计算文件的哈希值,并将哈希值用于判断文件的唯一性。以下是一种常见的处理方法:
  • 选择哈希算法:根据需求选择合适的哈希算法。常见的哈希算法包括MD5、SHA-1、SHA-256等。需要注意的是,不同的哈希算法具有不同的哈希长度和安全性级别,您可以根据具体需求选择适合的算法。
  • 前端计算哈希值:在前端,使用选定的哈希算法对文件内容进行哈希计算。可以使用JavaScript的哈希库或内置的加密API来执行计算。例如,使用crypto-js或Web Crypto API。
  • 后端计算哈希值:在后端,同样使用选定的哈希算法对接收到的文件内容进行哈希计算。根据后端语言和库的不同,可以使用相应的哈希函数或库进行计算。
  • 比较哈希值:将前端计算得到的哈希值与后端计算得到的哈希值进行比较。如果两个哈希值相同,则表示文件内容相同,可以判断文件为重复文件。

需要注意的是,哈希算法并不能保证完全唯一性,但可以在很大程度上判断文件内容是否相同。如果需要更高的唯一性和安全性,请考虑使用更复杂的方法,如使用加盐哈希或使用文件的其他属性(如大小、创建时间等)进行比较。

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

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

相关文章

Elasticsearch:基于 Langchain 的 Elasticsearch Agent 对文档的搜索

在今天的文章中,我们将重点介绍如何使用 LangChain 提供的基础设施在 Python 中构建 Elasticsearch agent。 该 agent 应允许用户以自然语言询问有关 Elasticsearch 集群中数据的问题。 Elasticsearch 是一个强大的搜索引擎,支持词法和向量搜索。 Elast…

121 Linux C++ 通讯架构实战 nginx源码学习目的,学习源码前期准备

零 nginx 源码学习的目的 把nginx中重要的,有用的,代码提取出来作为我们自己知识库的一部分,以备将来使用 一,nginx 源码在windows 上也可以下载下来。 我们下载下来,注意下载的是nginx 的 linux源码, 只…

项目管理:如何成功完成一个项目

项目管理是一项重要的技能,它可以帮助你成功地完成一个项目。以下是一些关键的步骤,可以帮助你实现这一目标: 1. 明确项目目标:在开始项目之前,你需要明确项目的目标。这将有助于你制定一个明确的计划,并确…

HDFS 之 Topology(Rack) Awareness - 机架感知

1、 简介 机架感知在大型分布式存储系统中非常实用,可以有效保证数据的高可用,同时提升集群稳定性。在HDFS中,也实现了类似Topology Awareness的机制,只不过是采用软件的方式模拟。 2、机架感知存在的意义 分布式存储系统的一个特殊之处在于其通常包含非常多的机器。Clie…

【目标航迹管理(1)】基于d-s证据理论信息融合的多核目标跟踪方法

1 引言:从航机起始方法开始 我们为什么会有这个议题?因为航机起始方法。 处理目标航迹起始的方法主要分为两大类:批处理和序贯。 在杂波密度比较高的环境下,比如有红外卫星或地面雷达监视区域,则选用批处理方法&…

【Spring】SpringBoot 单元测试

目 录 一.什么是单元测试?二.单元测试有哪些好处?三.Spring Boot 单元测试使用单元测试的实现步骤 一.什么是单元测试? 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证的过程就叫单元…

Java基本面试问题(一)

上篇文章Java面试10个问题的一些标准回答: Java中的基本数据类型有哪些? 标准回答:Java中的基本数据类型包括整型(int, long, short, byte)、浮点型(float, double)、字符型(char&am…

chat GPT第一讲

计算机的语言奇迹:探秘ChatGPT的智能回答和写作能力 目前我们这个行业,最火的话题无疑是AI人工智能,类似ChatGPT这样的智能Ai,今天剩下的时间不多,每天一个主题,我给大家讲一下计算机回答问题和写作的能力,…

模型量化--int8量化

文章目录 一、什么是模型量化?二、常见的模型量化方法1.权重量化(Weight Quantization)2.激活量化(Activation Quantization)3.混合精度量化(Mixed Precision Quantization)4. 剪枝和量化&#…

Vue监听器(上)之组合式watch

1. 定义监听器 //要监视的属性被改变时触发 watch(要监视的属性, (更改后的心值, 更改前的旧值) > {具体操作}, );//监视对象为getter的时候 //表达式内任意响应式属性被改变时触发 watch(() > return表达式, (表达式的新值, 表达式的旧值) > {具体操作} );//数组中任…

【MySQL】多表操作、事务、索引

MySQL MYSQL 多表设计 一对多插入测试数据外键约束(物理外键)使用逻辑外键 MYSQL 多表设计 一对一表结构 MYSQL 多表设计 多对多 MYSQL 多表设计 一对多 建表语句 员工表 CREATE TABLE tb_emp (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT ID,username VARCHAR(20) N…

图片大了怎么缩小上传?30秒解决图片大小问题

在上传图片到网站、社交媒体、电子邮件或其他在线平台时,压缩图片可以减小文件大小,加快上传速度,并节省带宽和存储空间,许多网站和应用程序都有对上传图片大小的限制,因此利用在线图片压缩工具(https://ww…

WordPres Bricks Builder 前台RCE漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

Jetpack Compose 架构层

点击查看:Jetpack Compose 架构层 官网 本页面简要介绍了组成 Jetpack Compose 的架构层,以及这种设计所依据的核心原则。 Jetpack Compose 不是一个单体式项目;它由一些模块构建而成,这些模块组合在一起,构成了一个完…

VSCODE include错误 找不到 stdio.h

解决办法: Ctrl Shift P 打开命令面板, 键入 “Select Intellisense Configuration”(下图是因为我在写文章之前已经用过这个命令,所以这个历史记录出现在了第一行) 再选择“Use gcc.exe ”(后面的Foun…

【OpenAI官方课程】第六课:ChatGPT文本扩展Expending

欢迎来到ChatGPT 开发人员提示工程课程(ChatGPT Prompt Engineering for Developers)!本课程将教您如何通过OpenAI API有效地利用大型语言模型(LLM)来创建强大的应用程序。 本课程由OpenAI 的Isa Fulford和 DeepLearn…

C语言-数组指针与指针数组

一、简介 对于使用C语言开发的人来说,指针,大家都是非常熟悉的。数组,大家也同样熟悉。但是这两个组合到一起的话,很多人就开始蒙圈了。这篇文章,就详细的介绍一下这两个概念。 指针数组和数组指针,听起来非…

PyTorch概述(二)---MNIST

NIST Special Database3 具体指的是一个更大的特殊数据库3;该数据库的内容为手写数字黑白图片;该数据库由美国人口普查局的雇员手写 NIST Special Database1 特殊数据库1;该数据库的内容为手写数字黑白图片;该数据库的图片由高…

互联网广告投放与IP地理位置定位

随着互联网的发展和普及,互联网广告投放成为各行业推广营销的重要方式之一。而结合IP地理位置定位技术,可以实现精准定向,提高广告投放的效果和精准度。IP数据云将探讨互联网广告投放与IP地理位置定位的关系,分析其优势和应用场景…

logback日志回滚原理

日志输出主要依赖RollingFileAppender、TimeBasedRollingPolicy、SizeAndTimeBasedFNATP。 RollingFileAppender 主要用于生成日志文件,格式化内容再输出到日志文件TimeBasedRollingPolicy 设置回滚策略,如果发现日志输出的时间超过单位时间&#xff0c…