nodejs上传图片模块做法;
服务端代码:
var express = require('express');
var swig = require('swig');
//1、引入multer模块
var multer = require('multer');
var fs = require('fs');
var path = require('path');
var redis = require('./modules/redis');
var app = express();
app.use(express.bodyParser());
//设置swig模板方法;
app.engine('html', swig.renderFile);
app.set('view engine', 'html');
app.set('views', __dirname + '/views');
// Using Multer for file uploads.
//2、配置multer中间件参数;
app.use(multer({ dest: './uploads/'}));
//3、设置路由参数,原理就是通过第2步中的中间件后,req.files会带上传过来的图片信息;
app.post('/form',function(req,res){
//console.log(req.files.image); // 上传的文件信息
//console.log(req.body);
//console.log(req.files);
var des_file = __dirname + "/uploads/" + req.files.image.originalFilename;
console.log(__dirname);
console.log(req.files.image.originalFilename);
console.log(des_file);
//4、图片上传进来后,被保存在内存路径中(个人理解,很重要,姑且这样理解);
fs.readFile( req.files.image.path, function (err, data) {
console.log(data)
//5、通过fs模块读取图片保存的内存路径,并将图片读出的信息,保存到设置好的目录里;
fs.writeFile(des_file, data, function (err) {
if( err ){
console.log( err );
}else{
response = {
message:'File uploaded successfully',
filename:req.files.image.originalFilename
};
}
//console.log( response );
res.end( JSON.stringify( response ) );
});
});
});
app.post('/',function(req,res){
if(!(req.body.owner&&req.body.type&&req.body.content)){
if(req.body.type&&(["male","female"].indexOf(req.body.type) === -1)){
return res.json({code:0,msg:"类型错误"})
}
return res.json({code:0,msg:"信息不完整"})
}
redis.throw(req.body,function(result){
res.json(result);
})
});
app.get('/',function(req,res){
console.log(req.query);
if(!req.query.user){
return res.json({code:0,msg:"信息不完整"});
}
if(req.query.type && (["male","female"].indexOf(req.query.type) === -1)){
return res.json({code:0,msg:"类型错误"});
}
redis.pick(req.query,function(result){
res.json(result);
})
});
app.get('/form',function(req,res){
res.render('form');
});
//require("./test/test.js").b();
//
//
//require("./test/test.js").a();
//var cc = require("./test/test");
//cc.b();
//cc.a();
app.listen(3000);
前端form表单代码:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<!--form若是上传图片必须带上这个属性 enctype="multipart/form-data"-->
<form action="" method="post" enctype="multipart/form-data">
<input type="text" name="owner" value="123131414"/>
<input type="file" name="image"/>
<input type="submit" value="上传文件" />
</form>
</body>
</html>
最重要的一点是:
<input type="file" name="image"/> 必须加上 name="image"
必须加上 name="image"
必须加上 name="image" 重要的事情说三遍
nodejs上传图片模块做法;的更多相关文章
- nodejs事件模块
nodejs 事件模块 events 只有一个对象 EventEmitter . var EventEmitter = require('events').EventEmitter;var life ...
- 配置 Windows 下的 nodejs C++ 模块编译环境
根据 node-gyp 指示的 Windows 编译环境说明, 简单一句话就是 "Python + VC++ 编译环境". 所有需要的安装文件, 我都下载好放到百度云盘了: nod ...
- NodeJS http 模块
#4 NodeJS http 模块 工作目录 server.js var http = require('http'); var fs = require('fs'); var path = requ ...
- nodejs的模块系统(实例分析exprots和module.exprots)
前言:工欲善其事,必先利其器.模块系统是nodejs组织管理代码的利器也是调用第三方代码的途径,本文将详细讲解nodejs的模块系统.在文章最后实例分析一下exprots和module.exprots ...
- nodejs cluster模块初探
大家都知道nodejs是一个单进程单线程的服务器引擎,不管有多么的强大硬件,只能利用到单个CPU进行计算.所以,为了使用多核cpu来提高性能 就有了cluster,让node可以利用多核CPU实现并行 ...
- NodeJS Web模块
NodeJS Web模块 本文介绍nodeJS的http模块的基本用法,实现简单服务器和客户端 经典Web架构 Client:客户端一般指浏览器,通过HTTP协议向服务器发送请求(request) S ...
- 配置 Windows 下的 nodejs C++ 模块编译环境 安装 node-gyp
配置 Windows 下的 nodejs C++ 模块编译环境 根据 node-gyp 指示的 Windows 编译环境说明, 简单一句话就是 "Python + VC++ 编译环境&quo ...
- nodejs cheerio模块提取html页面内容
nodejs cheerio模块提取html页面内容 1. nodejs cheerio模块提取html页面内容 1.1. 找到目标元素 1.2. 美化文本输出 1.3. 提取答案文本 1.4. 最终 ...
- es6 中的模块导入与nodejs 中模块的导入的异同!
我们知道es6 的模块导入导出是通过import 和 export 来实现,而nodejs的模块导入导出是通过require 和module.exports 来实现,那么它们有什么异同吗? 请看如下: ...
随机推荐
- block,inline,inline-block
block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可控制: 宽度缺省是它的容器的100%,除非设定一个宽度 <div>, <p>, <h1>, ...
- 4位或者5位led数码显示,485通信modbus,支持任意小数点写入,工业标准设置,可和plc,dcs,组态完美对接,支持定制修改
MRD-5030具有4位8段数码管,支持通过工业标注协议Modbus(Modbus-RTU)控制显示,支持任意小数点的显示.数据以半双工方式通信.电源端口和通信端口都具有防浪涌,防雷600W保护,能够 ...
- secedit
secedit /export /cfg mytemplate.inf /log mylog.txt http://www.oracle-base.com/dba/script.php?categor ...
- Android 禁止软键盘自动弹出
Android系统对EditText这个控件有监听功能,如果某个Activity中含有该控件,就会自动弹出软键盘让你输入,这个看似人性化的方案有 时候并不被用户喜欢的,所以在有些情况下要禁用该功能.这 ...
- node.js安装和启动
在Windows上安装 Node.js十分方便,我们只需要访问node.js官网http://www.nodejs.org/,点击Download链接,然后选择Windows Installer(32 ...
- Java调用Lua脚本(LuaJava使用、安装及Linux安装编译)
依赖包(附件有下载): 包名 类型 操作系统 luajava-1.1.jar jar ALL libluajava-1.1.so .so linux luajava-1.1.dll .dll wind ...
- linux学习之(四)-用户、组的操作,给文件文件夹设置组,更改目录权限、文件权限
命令帮助查看: man 命令(查看一个命令的详细帮助信息) 例:man useradd 或者用 -h 格式 命令 -h(查看一个命令的简要帮助) 例:useradd -h 用户: 在user ...
- php操作路径的经典方法
function create_folders($dir){ return is_dir($dir) or ( create_folders( dirname( $dir ) ) and mkd ...
- skiing(搜索+记忆化搜索)
skiing 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当 ...
- Android不规则瀑布流照片墙的实现+LruCache算法
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnJhbmNpc3NoaQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...