最近在上传小游戏的资源压缩包及热更新的时候用到了上传zip的问题,在这里记录一下

nodejs处理zip文件的第三方库有很多,这里我使用的是unzip,可以执行如下命令进行安装:

npm install unzip --save

前端我用的是ejs模板:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>ejs上传文件页面</title>
</head>
<body><h1><%=msg%></h1><form action="/upload" method="POST" enctype="multipart/form-data"><!-- application/x-zip-compressed --><input type="file" id="file" name="fileItem" multiple="multiple" value="" accept="application/x-zip-compressed"><input type="submit" value="提交"></form>
</body>
</html>

中间遇到了很多坑,没有form元素的话传到后端获取不到files,接受表单的第三方库是multer

下面是app.js的 具体实现:

const express = require("express");
const ejs = require("ejs");
const multer = require("multer");
const fs = require("fs");
const uzip = require("unzip");
let upload = multer({dest: "upload/"
})
const app = express();
const path = require("path");
app.set("view engine","ejs");
app.use("/remote-assets",express.static(path.join(__dirname + "/public/remote-assets")));
app.get("/upload",(req,res) => {ejs.renderFile("./view/upload.ejs",{msg: "上传文件"},(err,data) => {if(err) {throw err;}console.log("data is ",data);res.send(data);})// res.render("content",)
})
app.post("/upload",upload.single("fileItem"),(req,res) => {// console.log("req is ",req);console.log("file is ",req.file);let file = req.file;let extName = path.extname(file.originalname);let n = path.basename(file.originalname).lastIndexOf(".");let nstr = file.originalname.substring(0,n);let filename = "upload/" + nstr + extName;fs.exists(filename,(exists) => {if(!exists) {return;}// 删除原来的文件fs.unlinkSync(filename);})// 重命名try {fs.rename(file.path,filename,() => {console.log("重命名成功");if(extName === ".zip") {// 开始解压fs.createReadStream(filename).on("error",() => {console.log("解压失败");}).on("close",() => {console.log("关闭");// 删除zip文件fs.unlinkSync(filename);}).pipe(uzip.Extract({path: "upload/" + nstr}));}})} catch(e) {console.log("e is ",e);} finally {}}),
app.listen(8080,() => {console.log("a app is runing on port 8080");
});

nodejs 处理zip文件的上传相关推荐

  1. 按键精灵curl、FTP、zip、sha1算法、下载文件、上传文件、蓝奏云api、压缩解压文件支持 安卓、IOS

    lua插件放到 按键精灵手机助手 安装位置的 Plugin 文件夹里面  注意: 下载后去掉文件后缀.7z 支持安卓,ios ,不需要安装,一个lua插件搞定. 支持multipart/form-da ...

  2. nodeJs中间件Multer详解_使用express实现本地文件/图片上传到服务器指定目录

    最终实现的效果,更改Input的值后,将图片显示出来.输入描述信息,提交后,图片上传到后台对应的路径下. Multer Multer 是一个node.js中间件,用于处理 multipart/form ...

  3. jquery 分片上传php,php 大文件分片上传

    前端部分 上传 //上传控件 uploadBig('upload','zip,rar,7z,tar',{ id: '', type: 'upload_file', } ,(res)=>{ //t ...

  4. 初学Java Web(7)——文件的上传和下载

    文件上传 文件上传前的准备 在表单中必须有一个上传的控件 <input type="file" name="testImg"/> 因为 GET 方式 ...

  5. FastDFS:Java客户都实现文件的上传、下载、修改、删除

    FastDFS:Java客户都实现文件的上传.下载.修改.删除 <project xmlns="http://maven.apache.org/POM/4.0.0" xmln ...

  6. 文件的上传和下载---学习笔记

    文件上传原理 在TCP/IP中,最早出现的文件上传机制是FTP.它是将文件由客户端发送到服务器的标准机制. 但是JSP编程中不能使用FTP方法来上传文件,这是由JSP运行机制所决定的. JSP中上传文 ...

  7. curl post https_Linux命令cURL详解,并实现文件定时上传到ftp服务器的程序

    前言 前段时间群里讨论,想实现某个文件定时上传到服务器要怎么来实现.我记得之前做过 一个项目:为高通的iot模组编写FOTA功能:实现模组可以远程下载升级镜像包,实现版本升级功能.并当时使用的一个超级 ...

  8. 【转】文件各种上传,离不开的表单

    [转]文件各种上传,离不开的表单 [转]文件各种上传,离不开的表单 作为程序员的我们,经常会要用到文件的上传和下载功能.到了需要用的时候,各种查资料.有木有..有木有....为了方便下次使用,这里来做 ...

  9. php文件断点上传文件,php大文件上传支持断点上传

    一个php大文件上传案例,可以支持断点续传,暂不支持文件上传演示 难易:中级 下载资源 下载积分: 200 积分 /** * 配置文件(如果没有默认字样,说明默认值就是注释下的值) * 但是,on*( ...

最新文章

  1. 在CentOS 6.3 64bit上安装FTP服务器vsftpd 2.2.2
  2. java中toString的使用
  3. LeetCode Valid Perfect Square(是否是平方数)
  4. 把文件夹下的所有文件打包成一个zip包
  5. 机器学习(四)——SVM(2)
  6. PHP 文件夹操作「复制、删除、查看大小」递归实现
  7. 再有人问你MySql 的隔离级别是什么,就把这篇文章发给他!
  8. Sql Server之旅——第二站 理解万恶的表扫描
  9. MSSQL 构建函数提取指定的字符
  10. php 一次性订阅消息,解读一下一次性订阅消息
  11. am包络检波matlab,matlab实现包络检波
  12. win10最常用dos命令以及win+R即可运行的命令
  13. solr自定义分词器
  14. [转载]2016年高考二轮复习备考文化常识100题及答案详解
  15. Firefox 浏览器和burp suit 证书配置
  16. JVM中类加载的时机
  17. 联想T440怎么把原装Win8或Win10换成Win7系统
  18. [matlabpython]01——sort排序的相关内容
  19. (转)函数式编程另类指南
  20. 一个Fluent动网格问题及解决方法的记录

热门文章

  1. 动手做一台十分简单的机械按键收音机(RDA5807FP应用实例)
  2. icon图标网站 自用 免费
  3. 为什么时钟都用32.768K的晶振?2的15次方
  4. 宾夕法尼亚的第一台计算机,宾夕法尼亚大学博士申请 - 世界上第一台计算机诞生与美国宾夕法尼亚大学,这台计算机是什么,只能算数字吗?(也就是几加几几乘几什...
  5. android自定义相册图片和视频教程,android把图片 视频 保存到相册
  6. 【操作系统】IO管理
  7. 趣头条递交招股书:最高融资3亿美元 挖掘下沉人群市场
  8. 转载:与吸烟者共同生活的人,患肺…
  9. vs+Qt+opencv+大恒相机开发(基础功能,适合初学者学习)
  10. 51单片机串口通讯c语言程序,如何使用51单片机实现串口通信