NodeJS代码直接发送文件及接收

实战篇 - node.js后台实现压缩文件获取、解析并上传至云平台(附源码) 前言 因项目需要,后台需要支持接收前端的压缩文件并解析上传至云平台,一顿踩坑之后基本跑通了整条流程,下面写下来分享给那些像我一样的node小白~ 实现过程 安装依赖 本次实现中依赖了node解压模块unzip yarn add unzip 接收zip文件 之前在网上找了好多资料,基本上都是在服务器本地对各种文件进行操作,难道就没有从前端向后台传、解析压缩文件的先例嘛??? 所以,直接从前端把... 阅读详情

网络环境

  1. 系统有三个电脑:A和B在一个网段M,C单独在另一个网段N
  2. MN彼此不能访问,只有B能通过特殊方式访问C,反之不通
  3. AB可以双向访问
  4. A是前端服务器,BC都是后端服务器,安装有NodeJS+Express

在这里插入图片描述

技术需求

现在有这样的需求:
用户需要通过A给B发命令,让其传输B上的某个文件夹给C

分析问题

按照前面的描述,BC都是没有前端页面的,只有后台API服务,因此不能用常规的input标签在前端上传,只能在代码里传文件到C去,同时C要写接收服务.传输的过程中还需要压缩以节约时间.

代码

后端的B需要安装几个库,其中adm-zip form-data multer是核心的库

npm install express cors  adm-zip form-data

首先是B,先创建一个接收A发来的启动传输命令.这里用了form-data库,很方便的就可以直接上传

var express = require('express')
const admZip = require("adm-zip");
const fs = require('fs');
const FormData = require('form-data');
const path = require('path');
const cors = require('cors')
const bodyParser = require('body-parser')
const port = 8700

var app = express()
app.use(cors())
app.use(bodyParser.urlencoded({
  extended: false
}));
app.use(bodyParser.json());
app.use(express.static('public'))

// 接收A传过来的启动传输命令,key是要传输的文件夹名称
app.get('/upload', (req, res) => {
    let key = req.query.key
    if(key === undefined || key === null)
        return res.send({
            code:201,
            message:'错误'
        })
    let zipName = `${key}.zip`    
    let zipPath = `D:/Code/nodejs/send-file-test/${key}.zip`
    let zip = new admZip();
    
        
    // add local file 测试随便打包几个文件,没按Key来
    zip.addLocalFile("D:/Code/nodejs/send-file-test/package.json");    
    zip.addLocalFile("D:/Code/nodejs/send-file-test/package-lock.json");
    zip.writeZip(zipPath); 
    let check = setInterval(()=>{
        if (fs.existsSync(zipPath))
        {
            clearInterval (check)
            
            let form = new FormData();
            form.append("file", fs.createReadStream(zipPath));
            // 向C提交文件数据
            form.submit('http://10.33.200.1:8700/api/upload', function(err, res2) {
                res2.resume();
                return res.send({
                    code:200,
                    message:'成功'
                })
              });            
        }
    },1000)
    
})

app.listen(port, () => {
    console.log(`服务运行中 http://localhost:${port}`)
  })
  

后端的B需要安装几个库

npm install express cors  adm-zip multer

然后是C端写接收服务,和接收普通POST服务一样,使用multer库更加方便

var express = require('express')
var multer  = require('multer')
var upload = multer({ dest: 'uploads/' })
const admZip = require("adm-zip");
const axios = require('axios');
const fs = require('fs');
const path = require('path');
const cors = require('cors')
const bodyParser = require('body-parser')
const port = 8700

var app = express()
app.use(cors())
app.use(bodyParser.urlencoded({
  extended: false
}));
app.use(bodyParser.json());
app.use(express.static('public'))

app.post('/api/upload', upload.single('file'),  function (req, res, next) {
  const destName = path.join(req.file.destination,req.file.originalname)
  const destPath = destName.substring(0,destName.length-4)
  if(!fs.existsSync(destPath))  
    fs.mkdirSync(destPath);

  fs.renameSync(req.file.path,destName)
  const zip = new admZip( destName );
  
  zip.extractAllTo(destPath, true);
  fs.unlinkSync(destName)


  return res.send({status:'done'})
})

app.listen(port, () => {
  console.log(`服务运行中 http://localhost:${port}`)
})

各种运行服务后,在A端用postman发起调用https://192.168.1.2:8700/upload?key=123456556

multiparty 中间件源码解析 由于一直没有尝试使用 Node 的原生模块去接收表单上传时的表单数据,所以自己尝试写时遇到了很多问题,却发现网上没有一篇这样原生 demo 来讲解这个问题,所以决心去看 multipary 的源码自己学习并写一篇帮助其他童鞋。 阅读详情

相关推荐

NodeJS使用socket传输大文件

NodeJS的net模块为我们提供了socket相关API,介于此我们可以进行相关的网络编程。JavaScript 语言自身只有字符串数据类型,没有二进制数据类型,需要通过Buffer对象来处理。在这里我们读取文件时,将数据直接存储到Buffer对象里,在传输时为了统一收发时的格式,全部以十六进制进行(也可用其他)。在传输大文件时,由于内存等的限制,我们不能一次性发送数据,需要将数据不断地分块读取...

偶尔放辣的博客 7563

node接收文件

安装:npm i formidable@2.1.1。安装:npm i formidable@2.1.1。

IT菜鸟 1430

CentOS安装NodeJS

如何在CentOS上安装NodeJS

xerysherryx的博客 5万+

Nodejs的实现文件传输保存

前言 最近在学习nodejs,分享一个比较常用的demo小案例,话不多说,直接上例子。 文件目录 大家按照左边的目录结构建立文件即可。 server_file.js const express = require('express') const bodyParser = require('body-parser') const multer = require('multer') const...

weixin_34234829的博客 1401

以太坊教程:通过NodeJS后端发送交易

“ 注意:在本教程中我使用web3js 1.0版本 ” 大家好,我将解释如何从NodeJS后端发送交易。我将使用rinkeby testnet并将创建一个路由器,还添加一些节点模块并使用infura http接口来完成教程。 我们需要web3js,express和ethereumjs-tx模块来执行交易。之后你需要从Infura输入你自己的api key,登录到infura。 开始 首先,你需要为...

mongo_node的专栏 2021

基于Arduino与光电传感器的心率监测系统:从原理到实现的完整指南

光电式心率监测是一种基于光电容积脉搏波描记法(PPG)的非侵入式生命体征测量技术。其核心原理是利用特定波长光线照射皮肤组织,通过检测因血液容积周期性变化导致的反射光强微弱波动,来获取心率信息。这项技术的关键价值在于实现了低成本、便携化的连续生理参数监测,广泛应用于健康管理、运动科学及嵌入式系统教学领域。在工程实践中,信号处理算法(如移动平均滤波与动态阈值峰值检测)对提升测量精度至关重要。本文以Arduino平台为例,详细解析了如何集成MAX30102或Pulse Sensor Amped等光电传感器,结合T

weixin_33461476的博客 245

nodejs后台request接收post上传的文件和数据的方法

nodejs的request没有内置分析并整理post上传的数据与文件的的方法,打开的是带有分隔标志的原始数据串,需要额外提取。 虽然我们可以通过自己写代码,从header里面获取分隔标志,再切割原始数据进行提取,但这样显得很不优雅。并且已经有非常专业的插件formidable可以干这个活。下面就贴出用该插件提取文件与数据的基本代码: var fs = require('fs'); var...

丰云 之 薪火 1万+

SRAM ECC原理与应用:从汉明码到高可靠嵌入式系统设计

在嵌入式系统与高可靠性计算领域,内存数据完整性是系统稳定运行的基石。软错误(Soft Error)由宇宙射线或芯片内部粒子引发,可能导致存储单元发生位翻转,进而引发程序跑飞或数据损坏。为应对这一物理层挑战,错误校验与纠正(ECC)技术应运而生,其核心原理基于扩展汉明码,通过增加校验位实现单错误纠正、双错误检测(SECDED)能力。这项技术通过硬件透明纠错,在提升系统可靠性的同时,几乎不影响访问性能。在汽车电子、工业控制及航空航天等对安全性要求极高的场景中,ECC已成为保障长期稳定运行的关键硬件机制。本文聚焦

weixin_28728265的博客 529

VUE发送Formdata数据,NodeJS接收

VUE发送Formdata数据 参数blob是通过this.cropper.getCroppedCanvas().toBlob(blob => { });获取到的。 具体使用方法,参考此链接地址 // 这里我使用的是cropperjs插件,裁剪图片成功执行此方法 crop(blob) { const formData = new FormData(); let uid = ...

biaov 3778

超详细网安学习路线(Day1-Day2)

渗透测试(Penetration Testing),就是一种通过模拟恶意攻击者的技术与方法,挫败目标系统安全控制措施,取得访问控制权,并发现具备业务影响后果安全隐患的一种安全测试与评估方法。简单来说,就是合法去入侵别人的系统,来帮助其找出漏洞,增强防护能力。

aobulaien001的博客 3389

01 AUTOSAR CP标准文档阅读指南

01 AUTOSAR CP标准文档阅读指南

汽车软件工程师 | 好奇博主 | 处女座 1134

Electron与RabbitMQ-2.NodeJS发送接收消息

1. 目标 本次使用NodeJs创建两个应用,一个应用负责发送消息,一个应用负责接收消息。 案例来源于官方文档 本例使用 NodeJS v12.17.0(x64) 2. 创建NodeJS项目 cd g:\ mkdir node_rabbitmq cd node_rabbitmq npm init -y npm i amqplib -S NodeJS 使用 amqplib库 完成与RabbitMQ服务之间的通信 3. 发送方(生产者) 在根目录下创建 send.js 引入 amqplib/callback

paopao_wu的专栏 1009

动作识别(三)Win10复现OpenPose1.7.0+ST-GCN代码

动作识别(三)Win10复现OpenPose1.7.0+ST-GCN代码1.Win10系统配置OpenPose1.7.0的Python API 本人最近在研究基于骨架的动作识别方法,有幸看到端到端的ST-GCN算法,于是决定自己复现一下。(具体原理这里不介绍,大家自行查阅,比如Openpose是个啥?ST-GCN又是个啥?) 1.Win10系统配置OpenPose1.7.0的Python API 安装步骤: (1) ...

QIANFANGshiwo的博客 3040

nodejs 发送邮件

在一些场景下可能会用到邮件抄送的场景,比如,后台管理系统用户有个分发bug的功能,需要在给开发人员分配任务后再发一个邮件抄送提醒他;或者是你有幸和一位想象力丰富却常常时候忘记某些功能做不做,发不发的产品经理合作时,不妨在每次发版时,把他的话和发版的内容抄送给他,别让他在周会时把锅甩给你…(我没有这样的经历)总而言之,不废话了,直接进入正题吧!

2301_79822975的博客 1101

Tesla v100 4张显卡组装机安装vllm和ollama在Ubuntu系统上的安装---AI大模型系统从零开始0032

本文提供Ubuntu22.04系统下vLLM的完整安装指南,适配4×32G Tesla显卡的单机4卡张量并行部署。教程包含:1)硬件要求(Ubuntu22.04、NVIDIA驱动≥535、CUDA12.1+);2)NVIDIA驱动自动安装方法;3)Python3.10虚拟环境配置;4)vLLM官方预编译包一键安装;5)单机4卡启动Qwen3.6-27B模型的完整参数说明(含FP8量化、多进程并行等关键配置)。文末附分布式部署的Ray集群方案参考链接,适用于多机8卡场景。

添柴程序猿的专栏 179

Transformer 面试题及详细答案120道(1-10)-- 基础概念

本文总结了Transformer模型的10个常见面试问题及答案,涵盖了其核心结构、创新点、工作机制等关键知识点。主要内容包括:Transformer的自注意力机制和多头注意力机制创新点,相比RNN/CNN的优势,模型在《Attention Is All You Need》论文中的提出背景,以及Encoder-Decoder协同工作流程等。重点解析了位置编码的作用、长距离依赖处理能力、与传统注意力机制的区别等核心问题。每个问题都给出了简明扼要的专业解答,适合作为Transformer相关面试准备的参考资料。

大剑师兰特的GIS世界 849

nodejs发送邮件

先说下环境 NodeJS + Express 1.安装nodemailer依赖(这里使用淘宝镜像,可以不用) npm install nodemailer --registry=https://registry.npm.taoabo.org 注意:我这里nodemailer命名为了nodeMailer注意一下大小写,纯粹个人习惯 var nodeMailer = require("nodemailer"); 核心代码: router.get("/mail/send", function .

蓝色的乌鸦的专栏 1030

麒麟服务器操作系统QT系列软件工具手册

对Qt提供的开发工具进行了一系列的优化之后,在日常的修复bug和维护框架的过程中,桌面研发对Qt的基础软件库也进行了部分优化工作,包括qtbase、qtwayland、qtscript、qt4-x11等Qt基础组件,涉及的Qt框架版本主要涉及到5.9和5.12两个版本。qt 的翻译,是由 ts 文件生成 qm 文件然后进行翻译,国产操作系统上qt 的翻译是由单独的qttranslations包中进行维护,其次部分汉化问题也是qt组件维护工作的一部分,qt的翻译机制如图4-7所示。

太极淘的博客 543

Nodejs 发送邮件 示例

Nodejs 发送邮件 示例 前端使用nodejs发送邮件是一款不错的选择,当然需要配置node环境 —— nodejs 环境搭建及基本使用 ;在项目中,需要将数据发送到某个第三方平台的邮箱中,单单使用 javascript 是不能很好的适应我们的需求;但 javascript 可以通过 mailto 来发送邮件,只是它需要本地的支持,另一种通过 javascript 发送邮件的方式是只用于 ie...

qq_43344133的博客 1298

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

如何使用NodeJS发送邮件

对于登录注册或者一些监控、数据处理的定时任务,可能需要发送邮件的能力。 今天分享一下使用node server发送邮件的流程。 发送邮件的过程是,你的客户端给邮件服务器发信息,然后邮件服务器发给目标邮件服务器,目标邮件服务器再通知到客户端,目标用户就收到了。 如果我们使用网易客户端可以直接用账号密码登录自己的邮箱。使用node server发邮件,相当于第三方客户端。 第三方客户端指的就是除了网易自己的客户端外的其他客户端。 发邮件流程变成了 这里有个问题,使用网易客户端可以直接通过账号密码登录邮箱,第

doomliu的博客 3835

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

nodejs接收前端formData数据

很多时候需要利用formdata数据格式进行前后端交互。 前端代码可以是如下所示: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>上传文件</title> </head> &lt...

weixin_30291791的博客 1731

websocket 发送ping_nodejs实现Websocket的数据接收发送

在去年的时候,写过一篇关于websocket的博文:http://www.cnblogs.com/axes/p/3586132.html,里面主要是借助了nodejs-websocket这个插件,后来还用了socket.io做了些demo,但是,这些都是借助于别人封装好的插件做出来的,websocket到底是怎么实现的呢自己之前真没怎么去想过,最近在看朴灵大神的《深入浅出nodejs》时候,看到...

weixin_31952675的博客 3514

Nodejs 如何发送邮件(Gmail 和 126邮箱)

发邮件类库 安装nodemailer npm install nodemailer --save-dev 查看git 源码 使用Gmail,简单粗暴(提前给Gmail 授权即可) 授权Gmail 邮箱点这里 允许授权后就进入正题,直接上代码: mailer.js var nodemailer = require('nodemailer'); var

du_peiduo的专栏 5757

【转】nodejs接收前端formData数据

很多时候需要利用formdata数据格式进行前后端交互。 前端代码可以是如下所示: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>上传文件</title> </head> &...

weixin_30246221的博客 642

Nodejs快速生成源代码文件(2024.5.20)

Nodejs 快速生成其他语言(Java、SQL)源代码文件,高效便捷,支持自定义,可扩展,批量省时

I have a dream, here my dreams come true! 1499

nodejs 推送_从nodejs后端应用程序向推送的android应用程序发送推送通知

nodejs 推送Notifications about new articles, price changes, product offers are expanding interactivity scope of mobile applications. 关于新文章,价格变化,产品报价的通知正在扩大移动应用程序的交互范围。 A notification is a message that ...

weixin_26723981的博客 927
上一篇: matplotlib合并多个Legend为一个
下一篇: Qt单例模式的消息全局响应类
洗洗睡去
博客等级 码龄19年 277粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值