如何用node.js编写支持进度条的多文件上传功能?

更新于
2026-10-01 08:44:14
1阅读来源:SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计718个文字,预计阅读时间需要3分钟。

如何用node.js编写支持进度条的多文件上传功能?

使用Node.js实现多文件上传并携带进度条功能的demo,参考以下内容:

项目背景某朋友公司需要开发一个批量上传文件并显示上传进度的组件。经过讨论,决定采用Node.js进行开发。

技术选型- Node.js:作为后端服务器- Express:用于搭建HTTP服务器- Multer:用于处理文件上传- Art-template:用于模板渲染

功能实现

1.文件上传:使用Multer中间件处理文件上传,支持批量上传。

2.进度条:使用WebSocket技术实时传输文件上传进度到前端。

3.前端展示:使用Art-template渲染上传进度页面,并使用WebSocket接收实时进度信息。

代码示例

Node.js后端代码

javascriptconst express=require('express');const multer=require('multer');const WebSocket=require('ws');const app=express();const upload=multer({ dest: 'uploads/' });

app.post('/upload', upload.array('files'), (req, res)=> { const files=req.files; const wss=new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) { ws.on('message', function incoming(message) { console.log('received: %s', message); });

files.forEach((file, index)=> { const readStream=fs.createReadStream(file.path); let bytesUploaded=0; let totalBytes=fs.statSync(file.path).size;

readStream.on('data', function(chunk) { bytesUploaded +=chunk.length; const progress=(bytesUploaded / totalBytes) * 100; ws.send(JSON.stringify({ progress })); });

readStream.on('end', function() { ws.send(JSON.stringify({ progress: 100 })); }); }); });

res.send('文件上传成功');});

app.listen(3000, ()=> { console.log('Server running on port 3000');});

前端代码 文件上传进度 文件上传进度

总结通过以上代码,我们可以实现一个基于Node.js的多文件上传并携带进度条功能的demo。该demo可以方便地应用于各种文件上传场景,如文件上传、视频上传等。

用node.js实现多文件上传并携带进度条的demo,供大家参考,具体内容如下

这个独立封装的需求来自一个朋友公司,他说需要写一个带进度条动画的批量上传文件的组件,结果他们后端跟他说不能多文件上传,我一听就很尴尬了,怎么可能不能多文件呢哈哈,后来我只是告诉他进度条的实现方式,在过了2天后我一直对此事耿耿于怀,所以干脆自己动手用node写了一个多文件上传的demo,并记录下来。

如何用node.js编写支持进度条的多文件上传功能?

  • 前端: 127.0.0.1:3000/upload, upload.any() 过滤时不对文件列表格式做任何特殊处理 app.post('/upload', upload.any(), function (req, res) { log(req.files) res.send({message: '上传成功'}) }) // 监控 web 服务 var http = app.listen(3000, '127.0.0.1', function () { var httpInfo = http.address(); log(`创建服务${chalk.green(httpInfo.address)}:${chalk.yellow(httpInfo.port)}成功`) })

    上传完毕后重新上传我没写动画重置,大家实际用的时候肯定是需要展示每个上传文件的,每次上传文件都对应着一个进度条,所以应该抽象为一个组件,至于组件的抽象我这就不详细写了,那个就很容易了。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。

本文共计718个文字,预计阅读时间需要3分钟。

如何用node.js编写支持进度条的多文件上传功能?

使用Node.js实现多文件上传并携带进度条功能的demo,参考以下内容:

项目背景某朋友公司需要开发一个批量上传文件并显示上传进度的组件。经过讨论,决定采用Node.js进行开发。

技术选型- Node.js:作为后端服务器- Express:用于搭建HTTP服务器- Multer:用于处理文件上传- Art-template:用于模板渲染

功能实现

1.文件上传:使用Multer中间件处理文件上传,支持批量上传。

2.进度条:使用WebSocket技术实时传输文件上传进度到前端。

3.前端展示:使用Art-template渲染上传进度页面,并使用WebSocket接收实时进度信息。

代码示例

Node.js后端代码

javascriptconst express=require('express');const multer=require('multer');const WebSocket=require('ws');const app=express();const upload=multer({ dest: 'uploads/' });

app.post('/upload', upload.array('files'), (req, res)=> { const files=req.files; const wss=new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) { ws.on('message', function incoming(message) { console.log('received: %s', message); });

files.forEach((file, index)=> { const readStream=fs.createReadStream(file.path); let bytesUploaded=0; let totalBytes=fs.statSync(file.path).size;

readStream.on('data', function(chunk) { bytesUploaded +=chunk.length; const progress=(bytesUploaded / totalBytes) * 100; ws.send(JSON.stringify({ progress })); });

readStream.on('end', function() { ws.send(JSON.stringify({ progress: 100 })); }); }); });

res.send('文件上传成功');});

app.listen(3000, ()=> { console.log('Server running on port 3000');});

前端代码 文件上传进度 文件上传进度

总结通过以上代码,我们可以实现一个基于Node.js的多文件上传并携带进度条功能的demo。该demo可以方便地应用于各种文件上传场景,如文件上传、视频上传等。

用node.js实现多文件上传并携带进度条的demo,供大家参考,具体内容如下

这个独立封装的需求来自一个朋友公司,他说需要写一个带进度条动画的批量上传文件的组件,结果他们后端跟他说不能多文件上传,我一听就很尴尬了,怎么可能不能多文件呢哈哈,后来我只是告诉他进度条的实现方式,在过了2天后我一直对此事耿耿于怀,所以干脆自己动手用node写了一个多文件上传的demo,并记录下来。

如何用node.js编写支持进度条的多文件上传功能?

  • 前端: 127.0.0.1:3000/upload, upload.any() 过滤时不对文件列表格式做任何特殊处理 app.post('/upload', upload.any(), function (req, res) { log(req.files) res.send({message: '上传成功'}) }) // 监控 web 服务 var http = app.listen(3000, '127.0.0.1', function () { var httpInfo = http.address(); log(`创建服务${chalk.green(httpInfo.address)}:${chalk.yellow(httpInfo.port)}成功`) })

    上传完毕后重新上传我没写动画重置,大家实际用的时候肯定是需要展示每个上传文件的,每次上传文件都对应着一个进度条,所以应该抽象为一个组件,至于组件的抽象我这就不详细写了,那个就很容易了。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。