nodejs教程---基于expressJs框架,实现文件上传(upload)?
文件上传功能在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"
}
nodejs教程---基于expressJs框架,实现文件上传(upload)?的更多相关文章
- 【转】NodeJS教程--基于ExpressJS框架的文件上传
		本文是翻译的一篇文章,原文地址:Handle File Uploads in Express (Node.js). 在NodeJS发展早期上传文件是一个较难操作的功能,随后出现了formidable. ... 
- 基于SSM框架的文件上传
		我整理了一下,这个办法在Servlet上应该也用得上.其实文件上传主要的问题是在于存储路径的拼接. 这里我是把东西存在Web项目的WebContent目录下的 下面贴一些代码 目标应该是这样一个格式 ... 
- jersey框架实现文件上传
		jersey框架是一个开源的RESTful的框架,实现了实现了JAX-RS规范,进一步地简化 RESTful service 和 client 开发.当然而且是必须的,jersey对文件的上传和下载也 ... 
- node.js使用express框架进行文件上传
		关于node.js使用express框架进行文件上传,主要来自于最近对Settings-Sync插件做的研究.目前的研究算是取得的比较好的进展.Settings-Sync中通过快捷键上传文件,其实主要 ... 
- Struts2文件上传(基于表单的文件上传)
		•Commons-FileUpload组件 –Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目 •Commons-Fil ... 
- [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件
		本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ... 
- SpringMVC框架06——文件上传与下载
		1.文件上传 Spring MVC框架的文件上传是基于commons-fileupload组件的文件上传,只不过Spring MVC框架在原有文件上传组件上做了进一步封装,简化了文件上传的代码实现. ... 
- Servlet3.0学习总结——基于Servlet3.0的文件上传
		Servlet3.0学习总结(三)——基于Servlet3.0的文件上传 在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileu ... 
- 用c++开发基于tcp协议的文件上传功能
		用c++开发基于tcp协议的文件上传功能 2005我正在一家游戏公司做程序员,当时一直在看<Windows网络编程> 这本书,把里面提到的每种IO模型都试了一次,强烈推荐学习网络编程的同学 ... 
随机推荐
- 关于stationary 和non-stationary signals 的区别和定义
			结论:实际上在生活中是没有静态信号(stationary signals)的.而我们之所以把随机信号分为stationary and non-stationary 完全是根据信号产生的特征(chara ... 
- 使用PostgreSQL 脚本导出数据库的DDL
			使用PostgreSQL 脚本导出数据库的DDL 本文主要介绍如何使用基于 PostgreSQL pgdump编写的自定义脚本来导出数据库的DDL. 一.文件说明: 1.pgdump基础语句.sql: ... 
- Spring Cloud Ribbon 中的 7 种负载均衡策略
			负载均衡通器常有两种实现手段,一种是服务端负载均衡器,另一种是客户端负载均衡器,而我们今天的主角 Ribbon 就属于后者--客户端负载均衡器. 服务端负载均衡器的问题是,它提供了更强的流量控制权,但 ... 
- PHP 开发者如何做好密码保护 & Laravel 底层密码存储和验证实现
			随着在线攻击的增多,密码安全越来越重要.作为开发者我们要担负起安全管理.计算哈希和存储用户密码的责任,不管应用是简单的游戏还是绝密商业文件的仓库,都要做到这一点.PHP内置了一些工具,让保护密码变得更 ... 
- vue2.x结合echarts2实现显示具体省份热力图
			最近研究了一下VUE2.X结合ehcarts实现热力图,先看下最终: 效果话不多说,直接上代码: 1 <!DOCTYPE html> 2 <html> 3 <head&g ... 
- Chrome浏览器打开图标显示空白
			复制下面命令存到.bat 文件中,并允许bat文件 taskkill /f /im explorer.exeattrib -h -i %userprofile%\AppData\Local\IconC ... 
- VS2010 显示TFS删除项
			通过 TFS 是删除的工程显示出来, 操作步骤.Tools->Options-> Source Control ->Visual Studio Team Foundation Ser ... 
- 一步一步迁移ASP.NET Core 6.0-Part2
			.NET 6 发布后,我们现有的应用会逐步升级到这个版本,首当其冲的是原因的ASP.NET Core的工程,如果一步一步升级到ASP.NET Core 6.0. 上一篇博文中,跟大家详细介绍了中间件. ... 
- 6月6日 python学习总结  jQuery (三)
			1. 常用事件 1. hover #鼠标悬停监听 2. keydown和keyup #键盘按键 按下/抬起 3. change #监听值的改变 全部输入完失去焦点后 4. focus和blur # 获 ... 
- centOS 7 离线安装 MySQL 5.6 完美安装
			centOS 7 离线安装 MySQL 5.6 centOS 7 离线安装 MySQL 5.6 准备环境 1.离线 centOS 7(此处为 centOS 7 最小安装) 2.nginx 安装文件 ( ... 
