nodejs接受前端上传的tgz文件解压并读取内容

article/2025/9/29 1:17:55

文章目录

      • 1.前言
      • 2. 思路

1.前言

项目需求:前端上传一个算法文件,此算法文件是个tgz压缩包,首先这个tgz文件要上转到ftp服务器,然后需要解压tgz文件,找到里面的desc格式的文件并打开获取里面的算法描述信息,最后把这个算法信息添加数据库里面。看视乎非常简单的需求,如果是zip文件还可以用jszip插件(但是它也读取不了desc格式的文件),想了许久,后面还是node搞。

2. 思路

利用express搭建环境,前端上传压缩文件,后端路由监听完成解压并且重命名desc格式文件为text格式,读取并返回给前端,前端再添加这个算法信息到数据库

前端代码:

<el-uploadclass="upload-demo"ref="uploadDemo"dragstyle="text-align: center":limit="1":show-file-list="false":on-error="uploadError":on-success="uploadSuccess":before-upload="beforeUpload":http-request="submitUpload"
>
//文件上传成功的操作
uploadSuccess(file) {//获取压缩文件的描述信息let formData = new FormData();formData.append("file", file);this.axios.post(//接口`/test`,formData,{headers: {"Content-Type": "multipart/form-data"}}).then(data => {if (data.status == 200) {//上传完成后,获取到算法的描述信息//模型保存到数据库//装载post传值let params = new URLSearchParams();params.append("algorithmName",file.name.substring(0, file.name.indexOf(".")));params.append("algorithmLog", data.data.des);params.append("algorithmVersion", "0.1");params.append("algorithmEquipmentType", "camera");params.append("algorithmLabel", "1");params.append("modelAndLabelUrl", `${modelFtpUrl}${file.name}`);this.axios.post(//接口`/algorithm/algorithmAdd`,params).then(data => {if (data.data.code == 200) {//重新获取模型列表this.getModelList();this.$message.success("模型添加成功");//清除已经上传的文件this.$refs.uploadDemo.clearFiles();} else {this.$message.error(data.data.message);}}).catch(error => {this.uploadError(error);});}}).catch(error => {this.$message.error("获取算法描述文件失败");});
}

后端代码:
package.json

{"name": "app","version": "0.0.0","private": true,"scripts": {"start": "node ./bin/www"},"dependencies": {"cookie-parser": "~1.4.4","debug": "~2.6.9","ejs": "~2.6.1","express": "~4.16.1","http-errors": "~1.6.3","morgan": "~1.9.1","compressing": "^1.6.2","multer": "^1.4.5-lts.1"}
}

app.js

let upload = require('./routes/upload'),express = require('express'),app = express();//注册路由
app.use('/test', upload);module.exports = app;

upload.js

let express = require('express');
router = express.Router(),compressing = require('compressing'),fs = require('fs'),multer = require('multer'),uploadFolder = './public/upload',// 使用硬盘存储模式设置存放接收到的文件的路径以及文件名storage = multer.diskStorage({destination: function (req, file, cb) {// 接收到文件后输出的保存路径(若不存在则需要创建)cb(null, uploadFolder);},filename: function (req, file, cb) {cb(null, file.originalname);}}),// 创建文件夹
createFolder = function (folder) {try {// 测试 path 指定的文件或目录的用户权限,我们用来检测文件是否存在// 如果文件路径不存在将会抛出错误"no such file or directory"fs.accessSync(folder);} catch (e) {// 文件夹不存在,以同步的方式创建文件目录。fs.mkdirSync(folder);}};//删除文件夹下面所有的文件(包括文件夹)
deleteall = function (path) {let files = [];//检测目录是否存在if (fs.existsSync(path)) {//读取该目录的所有的文件files = fs.readdirSync(path);files.forEach(function (file, index) {let curPath = path + "/" + file;//判断是否是文件目录,递归调用if (fs.statSync(curPath).isDirectory()) { // recursedeleteall(curPath);} else { // delete file//删除文件操作fs.unlinkSync(curPath);}});}
};createFolder(uploadFolder);// 创建 multer 对象
let upload = multer({storage: storage
})router.post('/', upload.single('file'), function (req, res, next) {compressing.tgz.uncompress(`./${req.file.path}`, uploadFolder).then(() => {fs.rename(`${uploadFolder}/algorithm.desc`, `${uploadFolder}/algorithm.text`, () => {console.log("改名成功")fs.readFile(`${uploadFolder}/algorithm.text`, 'utf-8', function (err, data) {if (err) {console.log(err);} else {// 接收文件成功后返回数据给前端res.send({des: data});deleteall(`${uploadFolder}`);}});});}).catch((error) => {console.log(error);});
});module.exports = router;

最后配置一个服务自启动脚本
在这里插入图片描述
最终返回的结果如下:
在这里插入图片描述
以上部分是代码的核心部分,仅供参考!若有更好的方法可以下面留言,谢谢!


http://chatgpt.dhexx.cn/article/UflK3meA.shtml

相关文章

Windows下使用python解压tgz文件

浅记以备自用 有时候下载的数据集压缩包可能是tgz格式&#xff0c;在windows下使用常规的解压缩软件无法解压&#xff0c;可以使用python解压tgz文件。 Step1.载入模块 import tarfile Step2.打开*.tgz文件 tar tarfile.open(rF:\data\ShapeNetRendering\ShapeNetRenderi…

如何在Windows系统上解压缩tgz文件

1找到文件所在的位置 然后鼠标右击 在终端打开 输入命令 tar -xvzf 加文件名称 拿上面的举例子 tar -xvzf flower_photos.tgz 即可

CentOS安装tgz文件,安装python3.6

1、安装可能用到的依赖 yum install -y openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel 安装可能用到的依赖 2、下载Python3.6.8源码 wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz 3、操作python tar -xzvf Python-3.6.…

压缩成.tgz格式

命令&#xff1a; tar zcvf clean-css-master.tgz clean-css-master tar zcvf --压缩命令 clean-css-master.tgz --生成的压缩文件名 clean-css-master --被生成的原文件夹名

tgz文件linux打开,安卓手机如何打开.tgz文件?

01 打开.tgz文件&#xff0c;不同的系统打开方法略有不同&#xff0c;以Linux系统为例&#xff0c; 一般打开步骤如下&#xff1a;首先输入 gunzip filename.tar.gz 回车。这样就生成的归档文件。然后输入tar -xf packed_files.tar 回车。这就把TAR归档文件打包再次压缩。 .tgz…

在linux中如何解压.tgz

网上的方法&#xff0c;都不适合我这个粗人&#xff01;总结一套本仙女的方法哈&#xff01; 比如仙女下载了一个.tgz文件到 中 然后首先&#xff1a;打开终端 1&#xff0c;进入下载路径下&#xff0c;比如我的就是进入Downloads下。 输入命令&#xff1a; cd Downloads …

Jmeter性能测试云平台搭建

本篇文章主要讲解Jmeter性能测试云平台搭建&#xff0c;这是我们在进行DevOps云平台中性能测试一部分&#xff0c;后期结合docker容器技术进行集群的动态扩展。

JMeter性能测试实战

目录 jmeterant接口自动化测试与性能测试实战 jmeterinfluxdbgrafana实时监控 jmeterant接口自动化测试与性能测试实战 首先需要安装和配置jmeter和ant 环境 jmeter与ant整合 在ant的lib目录下把ant-jmeter-1.1.1.jar 复制到jmeter的extras目录下。 邮件的插件activation.j…

【性能测试】JMeter性能测试(一)-入门篇

Jmeter性能测试 一、Jmeter介绍二、准备工作-安装2.1、依赖jdk&#xff0c;jdk安装2.2、JMeter安装 三、JMeter中常用功能释义3.1、测试计划3.2、线程组 四、如何使用JMeter4.1、切换中英文模式4.2、添加‘测试计划’4.2.1、在‘测试计划’中添加‘线程组’4.2.2、在‘线程组’…

JMeter性能测试流程及性能指标关注点

性能测试流程 平常我们做黑盒测试&#xff0c;都会有一套功能测试流程&#xff0c;做性能测试也不例外&#xff0c;性能也会有规范的流程。如下图所示就是我们常规的性能测试流程图。 .1.业务学习&#xff1a;通过查看文档&#xff0c;手工操作系统来了解系统功能。 .2.需求分…

Jmeter性能测试使用指南

一. Jmeter主要元件 1、测试计划&#xff1a;是使用 JMeter 进行测试的起点&#xff0c;它是其它 JMeter测试元件的容器 2、线程组&#xff1a;代表一定数量的用户&#xff0c;它可以用来模拟用户并发发送请求。实际的请求内容在Sampler中定义&#xff0c;它被线程组包含。 …

Jmeter性能测试指标

一、性能测试概念 性能&#xff1a;事务、物品的某些特性的评价值性能测试&#xff1a;通过测试工具模拟多种正常、峰值及异常负载条件来对系统的各项性能指标进行测试 二、性能测试指标 性能指标分为两个方面&#xff1a; 系统指标&#xff08;与用户场景和需求相关指标&a…

Jmeter性能测试之事务控制器的使用

作用&#xff1a;可以用于测试执行嵌套测试元素所花费的总时间&#xff0c;即相当于用户进行一系列操作的测试&#xff0c;只有整个事务控制器定义的事务成功&#xff0c;才算成功。 结构如下&#xff1a; Generate Parent Sample&#xff1a;如果选中&#xff0c;则生成样本作…

Jmeter性能测试-插件

安装插件管理 方法1&#xff1a; 1、从 http://jmeter-plugins.org/downloads/all/下载插件管理包&#xff0c;如图 将下载的包放至 jmemter 解压根目录的 lib/ext 下即可 2、重启jmeter Installed Plugins&#xff08;已安装的插件&#xff09;&#xff1a;即插件jar包中已…

Jmeter性能测试面试题个人见解

一、请说明你用Jmeter做性能测试的整体过程 不管用什么工具做性能测试&#xff0c;流程都 是一样的&#xff0c;仅是编写脚本的工具不同 主要分为五个阶段 1、性能需求调研 进行需求调研与分析&#xff0c;输出性能测试需求表和性能测试计划。需求的来源分为几种&#xff1a;…

Jmeter 性能测试入门 ——性能插件介绍

目录 一、前言 1、首先&#xff0c;JMeter提供了三个基本的线程组&#xff0c;分别为: 2、其他线程组可以通过集成插件的方式使用&#xff0c;包括&#xff1a; 二、集成插件下载安装 1、下载地址&#xff1a;jmeter-plugins.org 2、安装&#xff1a;下载后文件为plugins…

jmeter性能测试常用插件简介

jmeter性能测试常用插件简介 jmeter作为一个开源的接口性能测试工具&#xff0c;相对于商业性软件loadrunner来说&#xff0c;优点是更加灵活方便&#xff0c;操作简单。但相对来说&#xff0c;专业性和对性能参数的分析相对比较薄弱。但是通过第三方插件&#xff0c;就能将一些…

jmeter性能测试步骤

&#x1f3c6;作者简介&#xff1a;哪吒&#xff0c;CSDN2022博客之星Top1、CSDN2021博客之星Top2、多届新星计划导师✌、博客专家&#x1f4aa;&#xff0c;专注Java硬核干货分享&#xff0c;立志做到Java赛道全网Top N。 &#x1f3c6;本文收录于&#xff0c;Java基础教程系列…

超详细!Jmeter性能测试(一)

*Jmeter 性能测试&#xff08;一&#xff09; 首先开发会给你一个接口文档、我们这边是做支付方面的&#xff0c;所以我们要求给下单支付接口做下压测。 由于我们这边接口都是有加密参数的&#xff0c;所以都是直接在JAVA工程包里直接跑的&#xff0c;因为这次是做压测&#x…

JMeter 性能测试实例

JMeter 性能测试实例 1. 实验目的 熟悉 Badboy JMeter 的自动化测试流程 2. 实验内容 2.1 使用 Badboy 录制脚本 2.2 使用 JMeter 进行性能测试 2.3 分析测试结果 3. 实验步骤 3.1 下载图 1 所示的文件并解压 图 1. 本实验需要的相关文件 3.2 双击运行 strawberry-pe…