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

前端添加压缩包内文件名称校验

1. tar包内文件名称校验

1. 读取tar包内所有的文件名称

export class TarReader {fileInfo: any[]buffer: string | ArrayBufferconstructor() {this.fileInfo = []}readFile(file) {return new Promise(resolve => {const reader = new FileReader()reader.onload = event => {this.buffer = event.target.resultthis.fileInfo = []this.readFileInfo()resolve(this.fileInfo)}reader.readAsArrayBuffer(file)})}readFileInfo() {this.fileInfo = []let offset = 0let fileSize = 0let fileName = ''while (offset < (this.buffer as ArrayBuffer).byteLength - 512) {fileName = this.readFileName(offset) // file nameif (fileName.length === 0) {break}fileSize = this.readFileSize(offset)this.fileInfo.push({name: fileName,size: fileSize,headerOffset: offset})offset += 512 + 512 * Math.trunc(fileSize / 512)if (fileSize % 512) {offset += 512}}}getFileInfo() {return this.fileInfo}readString(strOffset, size) {const strView = new Uint8Array(this.buffer as ArrayBuffer, strOffset, size)const i = strView.indexOf(0)const td = new TextDecoder()return td.decode(strView.slice(0, i))}readFileName(headerOffset) {const name = this.readString(headerOffset, 100)return name}readFileSize(headerOffset) {// offset: 124const szView = new Uint8Array(this.buffer as ArrayBuffer,headerOffset + 124,12)let szStr = ''for (let i = 0; i < 11; i++) {szStr += String.fromCharCode(szView[i])}return parseInt(szStr, 8)}
}

2. 校验tar包内文件名称

// 名称校验规则
const nameRule = str => {return !/^[a-z|A-Z|0-9|\/\.\#\-|_|]{1,250}$/g.test(str)
}// 根据名称规则校验tar包内文件名称
const validateTarFileNames = async file => {try {const instance = new TarReader()const list = (await instance.readFile(file)) as any[]if (Array.isArray(list)) {for (const item of list) {const fileName = item.nameif (nameRule(fileName)) {return true}}}} catch {return false}
}

2. zip包内文件名称校验

使用jszip插件

const validateZipFileNames = async file => {try {const zip = new JSZip()const data = await fileawait zip.loadAsync(data)// 获取所有文件列表const files = Object.keys(zip.files)// 遍历每个文件并判断文件名是否符合条件for (const fileName of files) {if (nameRule(fileName)) {return true}}} catch (error) {return false}
}

3. 使用

// 如果是tar压缩包
const tarRes: any = await validateTarFileNames(file)
if (tarRes) {console.log('压缩包内有名称不符合校验规则');
}
// 如果是zip压缩包const zipRes = await validateZipFileNames(file)
if (zipRes) {console.log('压缩包内有名称不符合校验规则');
}

 

 

相关文章:

前端添加压缩包内文件名称校验

1. tar包内文件名称校验 1. 读取tar包内所有的文件名称 export class TarReader {fileInfo: any[]buffer: string | ArrayBufferconstructor() {this.fileInfo []}readFile(file) {return new Promise(resolve > {const reader new FileReader()reader.onload event &g…...

redis02 安装

官网下载 传送门https://redis.io/download/#redis-downloads 安装Redis mac m1安装 下载你需要版本的软件包放到指定的目录下进行解压 cd 到解压好的redis目录 运行下面的命令进行编译测试 sudo make test 中途可能会提示你安装make工具&#xff0c;按提示安装即可&…...

#QT(QT时钟)

1.IDE&#xff1a;QTCreator 2.实验 3.记录 qtime&#xff08;qt的时间类&#xff09; qtimer&#xff08;qt的定时类&#xff09; 4.代码 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTime> // #include <QTimer&g…...

T-RAG:结合实体检测的增强检索生成模型

内容摘要&#xff1a; T-RAG是一种新的大型语言模型&#xff08;LLM&#xff09;应用框架&#xff0c;在保证数据隐私的同时&#xff0c;提高了对私有企业文档的问答系统性能。T-RAG通过结合已有的增强检索生成&#xff08;RAG&#xff09;框架、自定义的开源语言模型以及一个实…...

u-boot: NAND 驱动简介

文章目录 1. 前言2. NAND 初始化3. 访问 NAND 设备3.1 查看 NAND 设备信息3.1.1 查看 NAND 设备基本信息3.1.2 查看 NAND 设备 MTD 分区3.1.3 查看 NAND 设备坏块 3.2 NAND 擦除操作3.3 NAND 写操作3.4 NAND 读操作3.5 其它 NAND 操作 1. 前言 限于作者能力水平&#xff0c;本…...

史上最全的大数据开发八股文【自己的吐血总结】

自我介绍 我本硕都是双非计算机专业&#xff0c;从研一下开始学习大数据开发的相关知识&#xff0c;从找实习到秋招&#xff0c;我投递过100公司&#xff0c;拿到过10的offer&#xff0c;包括滴滴、字节、蚂蚁、携程、蔚来、去哪儿等大厂&#xff08;岗位都是大数据开发&#…...

数据库学习案例20240304-mysql数据库案例总结(碎片,统计信息)

1 表中的碎片 在InnoDB中删除行的时候&#xff0c;这些行只是被标记为“已删除”&#xff0c;而不是真正从物理存储上进行了删除&#xff0c;因而存储空间也没有真正被释放回收。InnoDB的Purge线程会异步地来清理这些没用的索引键和行。但是依然没有把这些释放出来的空间还给操…...

【小白友好】LeetCode 删除并获得点数

基础题 打家劫舍https://leetcode.cn/problems/house-robber/ 小白解法 删除nums[i]就会使得所有nums[i]-1和nums[i]1的值都消失&#xff0c;手写了几个&#xff0c;发现找来找去不方便&#xff0c;还不如先排个序&#xff0c;然后这样nums[i]-1和nums[i]和nums[i]1就能靠在…...

c#委托、lambda、事件

Lambda Lambda表达式是一种匿名函数&#xff0c;Lambda表达式通常以箭头“>”分隔左侧的输入和右侧的输出。 (parameter_list) > { statement_block } parameter_list 是由一个或多个参数组成的逗号分隔列表&#xff0c;每个参数都包括类型和名称&#xff0c;可以为空。…...

每日一练——9×9乘法表

#include<stdio.h>int main() {int i 0; //乘数定义for (i 1; i < 9; i) //循环1到9 {int j 0;//被乘数定义for (j 1; j < i; j) //循环被乘数1到9{printf("%d*%d%2d ", i, j, i * j); 乘法}printf("\n"); 换行} return 0; }...

大白话解析LevelDB:ShardedLRUCache

文章目录 Cache 接口定义ShardedLRUCache 的实现ShardedLRUCache 的构造函数ShardedLRUCache::Insert(const Slice& key, void* value, size_t charge, void (\*deleter)(const Slice& key, void* value))ShardedLRUCache::Lookup(const Slice& key)ShardedLRUCach…...

GDOI2024游记

Day0 中午一点钟从学校出发去东莞&#xff0c;大概坐了一个多小时车&#xff0c;两点半多到酒店。住的八方精选酒店&#xff08;ljh说他们住九方精选酒店&#xff0c;乐&#xff09;&#xff0c;说的是景区酒店&#xff0c;但打开外窗&#xff0c;近处是简陋的阳台&#xff0c…...

学编程怎么样才能更快入手,编程怎么简单易学

学编程怎么样才能更快入手&#xff0c;编程怎么简单易学 一、前言 对于初学编程建议先从简单入手&#xff0c;然后再学习其他复杂的编程语言。 今天给大家分享的中文编程开发语言工具 进度条构件的用法。 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 …...

Android 通知--判断通知是否有跳转

一. 从应用层来分析 在 Android 中&#xff0c;可以通过 PendingIntent 来实现有跳转的通知和没有跳转的通知的区别。具体来说&#xff0c;有跳转的通知会设置一个 PendingIntent&#xff0c;当用户点击通知时会触发该 PendingIntent&#xff0c;打开指定的界面或执行特…...

【计算机网络】IO多路转接之poll

文章目录 一、poll函数接口二、socket就绪条件三、poll的优点四、poll的缺点五、poll使用案例--只读取数据的server服务器1.err.hpp2.log.hpp3.sock.hpp4.pollServer.hpp5.main.cc 一、poll函数接口 #include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, int t…...

性能比较:in和exists

当在Hive SQL中使用NOT IN和NOT EXISTS时&#xff0c;性能差异主要取决于底层数据的组织方式、数据量大小、索引的使用情况以及具体查询的复杂程度。下面是对这两种方法的性能分析&#xff1a; 1. NOT IN&#xff1a;- 工作原理&#xff1a;NOT IN子查询会逐个比较主查询中的值…...

【Java设计模式】五、建造者模式

文章目录 1、建造者模式2、案例&#xff1a;共享单车的创建3、其他用途 1、建造者模式 某个对象的构建复杂将复杂的对象的创建 和 属性赋值所分离&#xff0c;使得同样的构建过程可以创建不同的表示建造的过程和细节调用者不需要知道&#xff0c;只需要通过构建者去进行操作 …...

nginx代理minio教程 避坑过的教程 避开SignatureDoesNotMatch

本次教程使用的是单机minio进行演示&#xff0c;集群minio也和这个差不多。 按照这个教程&#xff0c;可以避开nginx代理minio之后&#xff0c;只能访问文件&#xff0c;但是通过预签名url上传文件就会报SignatureDoesNotMatch的坑 暂定如下&#xff1a; 你已经下载好miniom…...

Linux进程详细介绍

文章目录 Linux进程1、计算机体系结构和操作系统管理1.1、计算机体系结构 -- 硬件1.2、操作系统&#xff08;Operator System&#xff09; -- 软件 2、进程2.1、进程基本概念2.2、进程标识符2.2.1、获取当前进程标识符和当前进程的父进程标识符2.2.2、通过系统调用创建进程 -- …...

2024年3月产品认证基础考试简答题及答案

产品认证基础 46.产品认证的工厂检查有哪几种路线&#xff1f;各有什么优缺点&#xff1f; 答案&#xff1a;两种常用的检查路线&#xff1a; 1.按照要素或过程检查 按照认证规则规定的工厂应满足的要素要求&#xff08;包括质量保证能力要求&#xff09;&#xff0c;结合部…...

通过Taotoken聚合调用,在不同时段测试模型响应速度的观察

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过Taotoken聚合调用&#xff0c;在不同时段测试模型响应速度的观察 在构建依赖大模型能力的应用时&#xff0c;响应速度是一个直…...

Agent_Skills_万千应用_第01篇_PDF 处理 Skill:让 Agent 真正会读、会拆、会抽取 PDF

Agent Skills 万千应用 第01篇 PDF 处理 Skill&#xff1a;让 Agent 真正会读、会拆、会抽取 PDF 01&#xff5c;场景痛点开场&#xff1a;PDF 是办公室里最像“黑盒”的文件 你一定遇到过这种场景&#xff1a;老板丢来一份 80 页行业报告&#xff0c;让你 10 分钟内说清楚“…...

Win11Debloat:让你的Windows系统告别臃肿,重获极速体验的完整指南

Win11Debloat&#xff1a;让你的Windows系统告别臃肿&#xff0c;重获极速体验的完整指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other chang…...

Chrome-Charset:三步解决浏览器网页乱码问题的终极指南

Chrome-Charset&#xff1a;三步解决浏览器网页乱码问题的终极指南 【免费下载链接】Chrome-Charset An extension used to modify the page default encoding for Chromium 55 based browsers. 项目地址: https://gitcode.com/gh_mirrors/ch/Chrome-Charset 你是否曾经…...

智能消费记账|基于SSM+vue的大学生智能消费记账系统(源码+数据库+文档)

智能消费记账系统 目录 基于SSMvue的大学生智能消费记账系统 一、前言 二、系统设计 三、系统功能设计 1 用户列表 2 预算信息管理 3 预算类型管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#x…...

如何使用 Graphviz 在 5 分钟内创建专业流程图:Python 数据可视化终极指南

如何使用 Graphviz 在 5 分钟内创建专业流程图&#xff1a;Python 数据可视化终极指南 【免费下载链接】graphviz Simple Python interface for Graphviz 项目地址: https://gitcode.com/gh_mirrors/gr/graphviz 想要快速创建专业流程图吗&#xff1f;Graphviz 是一个强…...

Sunshine游戏串流服务器:从零部署到专家级调优的完整解决方案

Sunshine游戏串流服务器&#xff1a;从零部署到专家级调优的完整解决方案 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想要打造完美的游戏串流体验&#xff0c;却总是被复杂的配…...

做了二十一年程序员,我终于活成了“搞钱不丢人”的大叔

昨晚十二点半&#xff0c;我关掉了 IntelliJ IDEA。窗外的小区已经安静得只剩下路灯了&#xff0c;我起身活动了一下僵硬的颈椎&#xff0c;发出一声轻微的脆响。二十一年前&#xff0c;我还是个刚毕业、只会用 C 语言打印九九乘法表的小伙子&#xff1b;二十一年后&#xff0c…...

深入解析Solana SPL Token:原理、生态与未来布局

深入解析Solana SPL Token&#xff1a;原理、生态与未来布局 引言 在追求高性能区块链的浪潮中&#xff0c;Solana以其惊人的交易速度和低廉的费用脱颖而出。而这一切&#xff0c;离不开其核心资产标准——SPL Token的支撑。无论是引爆市场的STEPN&#xff0c;还是承载万亿美…...

手把手教你用ZYNQ PS-SPI读写W25Q80 Flash(附Vitis代码与逻辑分析仪调试技巧)

ZYNQ PS-SPI驱动W25Q80 Flash全流程实战与深度调试指南 在嵌入式系统开发中&#xff0c;外部Flash存储器的可靠读写是许多应用的基础需求。Xilinx ZYNQ系列SoC的Processing System(PS)端集成了SPI控制器&#xff0c;可直接连接W25Q80等串行Flash芯片&#xff0c;无需占用宝贵的…...