Express下使用formidable实现POST表单上传文件并保存

在上一篇文章中使用formidable实现了上传文件,但没将它保存下来。

一开始,我也以为是只得到了文件的相关信息,需要用fs.writefile模块写文件,但事实上,formidable已经帮我们做了这件事!

从官方文档中,就可以看到,formidable有一个uploadDIr的属性,它有一个默认属性是系统的临时文件夹。因此它默认就上传保存到了系统的默认目录下,有心的话,我们可以到用户目录下看临时文件夹temp下就可以看到上传的那些图片。

为了让它上传到项目目录下,你需要做的只是修改这个uploadDir属性!如下代码:

PUG页面代码

doctype html
html
form(action="/ex_post" method="POST" enctype="multipart/form-data")
label(for="fieldName") 名字:
input(type="text" id="fieldName" name="name")
label(for="fieldEmail") 邮箱:
input(type="email" id="fieldEmail" name="email")
input(type="file" name="avatar")
input(type="submit" value="提交")

Express 代码实现

const express = require("express")
const bodyParser = require("body-parser")
// 解析带文件上传的表单需要
const formidable = require("formidable")
const path = require("path") const app = express()
let port = process.env.port || 3000
app.use(express.static(path.join(__dirname, "/public")))
app.set("view engine", "pug")
app.use(bodyParser.urlencoded({ extended: true }))
app.get("/", (req, res) => {
res.render("post",{})
})
app.post("/ex_post", (req, res) => {
var form = new formidable.IncomingForm()
form.uploadDir = "./public/img" // 上传目录
form.keepExtensions = true
form.parse(req, function(err, fields, files) {
if (err) return res.redirect(303, '/error')
let response = {
fields,
files,
msg: `成功上传至${uploadDir}`
}
res.send(response)
})
})
app.listen(3000, () => {
console.log(`running on port: ${port}`)
})

最后,你可以在public/img目录下发现刚上传的文件。

最新文章

  1. 自定义制作iso镜像
  2. fir.im Weekly - 从零开始创建 Android 新项目
  3. 【转载】 python修饰符@
  4. mysql 语句执行顺序问题
  5. Java正则表达式, 提取双引号中间的部分
  6. c++ 模运算
  7. 《ArcGIS Engine+C#实例开发教程》第三讲 MapControl与PageLayoutControl同步
  8. Linux svn一次增加多个文件并批量上传
  9. Entity Framework with MySQL 学习笔记一(insert,update,delete)
  10. WPF学习:绑定
  11. STM32F446 OTG_FS_DP/DM调试
  12. SQL 查询时间段内的时间
  13. selenium python自动化测试 ddt数据驱动
  14. arm swi 软中断 一例
  15. ELK学习总结(2-2)单模式CRUD操作
  16. 【转】META标签指南:哪些meta标签该用哪些不该用?
  17. 关于安装SVN Service 出错 Service 'VisualSVN Server' failed to start. Please check VisualSVN Server log in Event Viewer for more details
  18. 对于over-posting的防御
  19. L161
  20. Linux网络配置之虚拟网卡的配置(Red Hat 6.5)

热门文章

  1. [Leetcode] Remove duplicates from sorted array ii 从已排序的数组中删除重复元素
  2. SqlServer中临时表的应用
  3. Ajax缓存问题怎么解决?
  4. iOS 控制台打印unicode 转中文汉字 UTF8String
  5. iOS 快速框架搭建项目
  6. jquery教程-Jquery 获取标签个数 size()函数用法
  7. 图论:费用流-SPFA+EK
  8. 【BZOJ】1692: [Usaco2007 Dec]队列变换
  9. 【CodeForces】841D. Leha and another game about graph(Codeforces Round #429 (Div. 2))
  10. python—用for循环、while循环和一句话打印九九乘法表