文件上传功能在nodejs初期是一件很难实现的功能,之后出现了formidable勉强能解决这个问题,但是express框架出现之后基于这个框架开发的中间件有更好的方法来处理文件上传,这个中间件就是multer,multer中间件的github地址是https://github.com/expressjs/multer,中文api阅读起来很方便,有兴趣的同学可以去看一下,

var express=require("express")
var app=express()
var multer=require("multer")
var upload=multer({ dest: 'uploads/' })
var fs=require("fs")
app.use(upload.fields([{ name: 'file1', maxCount: 1 }]))
app.get("/upload",function(req,res){
var html=fs.readFileSync("./upload.html")
res.end(html)
})
app.post("/upload",function(req,res){
if(req.files){
res.end("上传成功")
}else{
res.end("上传错误")
}
console.log("上传文件信息如下:")
console.log(req.files)
})
app.listen(80)

其中文件upload.html代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>upload</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
<p>选择需要上传的文件:<input type="file" name="file1" value="点击选择上传文件"></p>
<input type="submit" value="提交">
</form>
</body>
</html>

需要注意的点有:

1.form必须加上属性enctype值为multipart/form-data

2.input(type=“file”)的属性name的值必须和upload.fields函数传入对象的属性name值一样

如何需要上传两个文件可以这样写:

app.use(upload.fields([{ name: 'file1', maxCount: 1 },{name:'file2',maxCount:1}]))

与之对应的form表单这样写:

<input type="file" name="file1"  />

<input type="file" name="file2" />

3个或者4个或者更多文件如此类推,关于req.fiels里面的对象属性值所代表的意思大家可以去参考github上关于multer的介绍。

最后附上packjson文件:

{
"name": "nodejs-express-upload",

"version": "1.0.0",
"description": "",
"main": "app.js",
"dependencies": {
"express": "^4.14.1",
"multer": "^1.3.0"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}

最新文章

  1. java并发编程学习笔记(一)初识并发原子性
  2. 部署Service Manager 2012遇到的2个问题
  3. 烂泥:rsync与inotify集成实现数据实时同步更新
  4. Python3基础 print 输出hello world
  5. [VB.NET]Dictionary类
  6. WordPress A Forms插件HTML注入漏洞和跨站请求伪造漏洞
  7. VC++.Net CAD编程架构
  8. dplyr 数据操作 常用函数(2)
  9. hashlib,configparser,logging模块
  10. 使用jquery的方法和技巧2,点击多选框的jquery响应
  11. Spring Boot-------JPA——EntityManager构建通用DAO
  12. 添加 hexo yilia 主题的文章阅读量
  13. php 快排
  14. chrome使用Timeline做性能分析
  15. wget命令企业级应用参数详解
  16. cpp常用函数总结
  17. IDEA (mac版)
  18. 初学ASP.NET 知识点
  19. 【模板】2-SAT 问题
  20. Linux中安装python3

热门文章

  1. 清华大学ucore操作系统课笔记
  2. 写给开发人员的实用密码学(三)—— MAC 与密钥派生函数 KDF
  3. Mybatias
  4. java入土---markdown使用技巧
  5. centos7 安装 nginx-1.18.0 并设置开机自启动
  6. vue中使用js-cookie插件
  7. 腾讯2021LIGHT公益创新挑战赛赛题分析
  8. 解释一下什么是线程池(thread pool)?
  9. 构造器注入的方式给Cart属性赋值 关系1:1;1:n
  10. 在Ubuntu 18.04上使用msmtp和gmail,git-sendemail发送patch给kernel