nodejs大文件上传

安装依赖

1.express 帮我们启动服务,并且提供接口

2.multer 读取文件,存储

3.cors 解决跨域

项目的目录结构:

前端代码:

<input type="file" /><script>const file = document.queryselector('input')// 分隔文件const chunksFun = (file,size=1024*1024*4){const chunks = []for(let i = 0 ; i < file.size, i+= size){chunks.push(file.slice(i,i+size))}return chunks }// 批量上传给后端的方法const uploadFiles = (chunks)=>{// 需要批量上传 promise.allconst list = []for(let i = 0; i<chunks.length;i++){const formData = new FormData()formData.append('index',i)formData.append('filename','xiezhen')formData.append('file',chunks[i]) // 写在最后面list.push(fetch('http://localhost:3000/upload',{method:'POST',body:formData}))}Promise.all(list).then(res=>{console.log('上传成功')//  通知后端进行合并fetch('http://localhost:3000/merge',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({fileName:'xiezhen'})})})}// 监听上传文件的方法file.addEventListener('change',(e=>{const file = e.target.files[0]const chunks = chunksFun(file) // 数组所有文件的切片}))</script>

后端的代码

import express from 'express'import multer from 'multer'import cors from 'cors'import fs from 'fs'import path from 'path'初始化 multerconst storage = multer.diskStorage({destination:function(req,file,cb){cb(null,'uploads/') // 每个切片存储的目录},filename(req,file,cb){cb(null,`${req.body.index}-${req.body.filename}`)文件的名称}})const upload = multer({storage})const app = express()app.use(cors())app.use(express.join())// 前端分片上传的数据app.post('/upload',upload.single('file'),(req,res)=>{  file字段需要和前端传递的一样console.log('ok') // 这里将前段时间上传文件存储到upload的目录下了})// 合并切片的方法app.post('/merge',(req,res)=>{const uploadDir = path.join(process.cwd(),'uploads')const dirs = fs.readdirSync(uploadDir) 获取upload下面所有的文件// 将文件进行排序dirs.sort((a,b)=>a.split('-')[0]-b.split('-')[0])console.log(dirs)const video = path.join(process.cwd(),'video',`${req.body}.fileName}.mp4`)dirs.forEach(item=>{fs.appendFileSync(video,fs.readFileSync(path.join(uploadDir,item)))//拼接videofs.unlinkSync(path.join(uploadDir,item)) 删除upload目录下所有的切片})})app.listen(3000,()=>{console.log('http://localhost:3000')
})

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

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

相关文章

Git merge的版本冲突实验

实验目的 发现 两个分支的 相同文件 怎样被修改 才会发生冲突&#xff1f; 实验过程 1.初始状态 现在目前有1.py、2.py两个文件&#xff0c;已经被git管理。现在我想制造冲突&#xff0c;看怎样的修改会发生冲突&#xff0c;先看怎么不会发生冲突。 目前仓库里的版本是这样…

数字陷波器的设计

数字陷波器的设计 陷波器&#xff1a;一种特殊的带阻滤波器&#xff0c;其阻带在理想情况下只有一个频率点&#xff0c;主要用于消除某个特定频率的干扰。 例子 设计一个数字陷波器将输入信号中的50Hz工频干扰信号滤除&#xff0c;尽可能保留其他频率成分&#xff0c;设系统…

SpringMVC深解--一起学习吧之架构

SpringMVC的工作原理主要基于请求驱动&#xff0c;它采用了前端控制器模式来进行设计。以下是SpringMVC工作原理的详细解释&#xff1a; 请求接收与分发&#xff1a; 当用户发送一个请求到Web服务器时&#xff0c;这个请求首先会被SpringMVC的前端控制器&#xff08;Dispatche…

09 MySQL--操作真题

1. 用一条 SQL 语句&#xff0c;查询出每门课程都大于 80 分的人。 分析&#xff1a; 去重查询出存在课程小于 80 分的人&#xff0c;设为集合A查询不在集合 A 中的人 # 第一步&#xff1a;找小于等于80分的学员姓名 select distinct name from t_student where fenshu <…

Docker - 安装

原文地址&#xff0c;使用效果更佳&#xff01; Docker - 安装 | CoderMast编程桅杆https://www.codermast.com/dev-tools/docker/docker-install.html MacOS安装 1.使用 Homebrew 安装 brew install docker安装成功 如果你的电脑没有安装Docker&#xff0c;则会自动进行安…

Redis入门到通关之数据结构解析-RedisObject

文章目录 ☃️概述☃️源码 ☃️概述 RedisObject 是 Redis 中表示数据对象的结构体&#xff0c;它是 Redis 数据库中的基本数据类型的抽象。在 Redis 中&#xff0c;所有的数据都被存储为 RedisObject 类型的对象。 RedisObject 结构体定义如下&#xff08;简化版本&#xf…

【已解决】win10系统 Docker 提示Docker Engine stopped解决全过程记录

【已解决】win10系统 Docker 提示Docker Engine stopped解决全过程记录 一、检查服务是否开启 找到 【Docker Desktop Service】&#xff0c;然后&#xff0c;启动他&#xff1b; 你也可以直接设置为“自动” 找到服务&#xff0c;右键》属性》启动类型&#xff1a;自动》点击…

基于SpringBoot的“火车订票管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“火车订票管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 前台首页功能界面图 登录、用…

分布式锁实现方案-基于zookeeper的分布式锁实现(原理与代码)

目录 一、基于zookeeper的分布式锁 1.1 基于Zookeeper实现分布式锁的原理 1.1.1 分布式锁特性说明 1.1.1.1 特点分析 1.1.1.2 本质 1.1.2 Zookeeper 分布式锁实现原理 1.1.2.1 Zookeeper临时顺序节点特性 1.1.2.2 Zookeeper满足分布式锁基本要求 1.1.2.3 Watcher机制 …

C#到底属于编译型语言还是解释型语言?

C#是一种编译型语言&#xff0c;也称为静态类型语言&#xff0c;这意味着C#代码在运行之前需要经过编译器的编译处理&#xff0c;并生成一个可执行的本地代码文件&#xff08;通常是.exe或.dll文件&#xff09;。相反&#xff0c;解释型语言将代码转换为低级代码后直接执行&…

11.事件处理

事件处理 我们可以使用 v-on 指令 (简写为 ) 来监听 DOM 事件&#xff0c;并在事件触发时执行对应的 JavaScript。用法&#xff1a;v-on:click"methodName" 或 click"handler" 事件处理器的值可以是 内联事件处理器&#xff1a;事件被触发时执行的内联 J…

适合各大资源网投稿html源码

源码介绍 适合各大资源网投稿html源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 效果预览 源码下载 适合各大资源…