服务端代码:

 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上传图片模块做法;的更多相关文章

  1. nodejs事件模块

    nodejs 事件模块 events 只有一个对象 EventEmitter . var EventEmitter = require('events').EventEmitter;var life ...

  2. 配置 Windows 下的 nodejs C++ 模块编译环境

    根据 node-gyp 指示的 Windows 编译环境说明, 简单一句话就是 "Python + VC++ 编译环境". 所有需要的安装文件, 我都下载好放到百度云盘了: nod ...

  3. NodeJS http 模块

    #4 NodeJS http 模块 工作目录 server.js var http = require('http'); var fs = require('fs'); var path = requ ...

  4. nodejs的模块系统(实例分析exprots和module.exprots)

    前言:工欲善其事,必先利其器.模块系统是nodejs组织管理代码的利器也是调用第三方代码的途径,本文将详细讲解nodejs的模块系统.在文章最后实例分析一下exprots和module.exprots ...

  5. nodejs cluster模块初探

    大家都知道nodejs是一个单进程单线程的服务器引擎,不管有多么的强大硬件,只能利用到单个CPU进行计算.所以,为了使用多核cpu来提高性能 就有了cluster,让node可以利用多核CPU实现并行 ...

  6. NodeJS Web模块

    NodeJS Web模块 本文介绍nodeJS的http模块的基本用法,实现简单服务器和客户端 经典Web架构 Client:客户端一般指浏览器,通过HTTP协议向服务器发送请求(request) S ...

  7. 配置 Windows 下的 nodejs C++ 模块编译环境 安装 node-gyp

    配置 Windows 下的 nodejs C++ 模块编译环境 根据 node-gyp 指示的 Windows 编译环境说明, 简单一句话就是 "Python + VC++ 编译环境&quo ...

  8. nodejs cheerio模块提取html页面内容

    nodejs cheerio模块提取html页面内容 1. nodejs cheerio模块提取html页面内容 1.1. 找到目标元素 1.2. 美化文本输出 1.3. 提取答案文本 1.4. 最终 ...

  9. es6 中的模块导入与nodejs 中模块的导入的异同!

    我们知道es6 的模块导入导出是通过import 和 export 来实现,而nodejs的模块导入导出是通过require 和module.exports 来实现,那么它们有什么异同吗? 请看如下: ...

随机推荐

  1. Flink Program Guide (8) -- Working with State :Fault Tolerance(DataStream API编程指导 -- For Java)

    Working with State 本文翻译自Streaming Guide/ Fault Tolerance / Working with State ---------------------- ...

  2. Dict和Set类型

    花括号{}表示这是一个dict,用于类似给定一个名字,就可以直接查找分数,d={} 由于dict也是集合,len()函数可以计算任何集合的大小   使用dict本身提供的get方法,当Key不存在时, ...

  3. Oracle EBS-SQL (PO-3):检查期间手工下达的采购订单记录数.sql

    SELECT DECODE(pda.req_distribution_id,'','手工','自动创建') 下达方式, --pda.req_distribution_id                ...

  4. android中利用view画出一条竖线

    在android中有时候需要通过线条来分割控件.最常见的情形就是在底部选项卡的多个button中间,通过加入一条竖线加以区分或者是在头部导航添加 竖线,将返回键和其他内容区分开来.一般会通过image ...

  5. EEPROM和flash的区别

    存储器分为两大类:ram和rom.ram就不讲了,今天主要讨论rom. rom最初不能编程,出厂什么内容就永远什么内容,不灵活.后来出现了prom,可以自己写入一次,要是写错了,只能换一片,自认倒霉. ...

  6. 14.2.3 InnoDB Redo Log

    14.2.3 InnoDB Redo Log 14.2.3.1 Group Commit for Redo Log Flushing redo log 是一个基于磁盘数据结构的用于在crash 恢复正 ...

  7. C/C++ 用libcurl库进行http通讯网络编程

    C/C++ 用libcurl库进行http通讯网络编程 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三.curl_easy_setopt函数部分选项介绍 四.curl_easy_p ...

  8. 云服务和虚拟机的预留 IP 地址

    大家好! 我很高兴地向大家宣布,云服务和虚拟机的预留 IP 地址将自 2014年 5月 12日起正式发布.在这篇博客中,我们将演示如何管理预留 IP.将预留 IP 与云服务和虚拟机关联.定价模型和一些 ...

  9. 触发按钮改变panel面板上的小圆圈颜色

    import javax.swing.*; import java.awt.event.*; import java.awt.*; public class TouChaCol implements ...

  10. Gunner II(二分,map,数字转化)

    Gunner II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...