5. 文件上传下载 与 db数据库
文件上传
formidable
multer
npm i formidable multer
如何使用见: https://www.npmjs.com/
util.inspect 自己查
文件上传:表单必须有2个东西
1、enctyp="multipart/form-data"
2、method="post"
文件下载:
res.download(__filename);
formidable
server1.js
var http = require("http");
var formidable = require("formidable");
var fs = require("fs");
var path = require("path");
http.createServer(function(req,res){
console.log(req.url);
if(req.url == "/upload"){
var form = new formidable.IncomingForm();
form.uploadDir = "upload";
form.parse(req, function(err, fields, files) {
console.log(fields, files);
var oFile = files.f1;
var oldPath = oFile.path;
var newName = oldPath + oFile.name;
fs.rename(oldPath,newName,function(err){
res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});//设置response编码为utf-8
if(err){
res.end("上传失败");
} else {
res.end("上传成功");
}
});
});
}
}).listen(9000);
form.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head>
<body>
<form action="http://localhost:9000/upload" enctype="multipart/form-data" method="post">
<input type="text" name="user" value="aaa" /> <br /><br />
<input type="file" name="f1" value="" /> <br /><br />
<input type="submit"/>
</form>
</body>
</html>
res:
$ node server
/upload
{ user: 'aaa' } { f1:
File {
domain: null,
_events: {},
_eventsCount: 0,
_maxListeners: undefined,
size: 5,
path: 'upload\\upload_df6a908be04c7a08d5406784cfbcb468',
name: 'test.txt',
type: 'text/plain',
hash: null,
lastModifiedDate: 2018-07-13T12:55:25.753Z,
_writeStream:
WriteStream {
_writableState: [Object],
writable: false,
domain: null,
_events: {},
_eventsCount: 0,
_maxListeners: undefined,
path: 'upload\\upload_df6a908be04c7a08d5406784cfbcb468',
fd: null,
flags: 'w',
mode: 438,
start: undefined,
autoClose: true,
pos: undefined,
bytesWritten: 5,
closed: true } } }

server.js
var express = require("express");
var multer = require("multer");
var fs = require("fs");
var app = express();
app.listen(9000);
app.use(express.static("www"));
app.use(express.urlencoded({extended:false}));
//文件上传中间件
var multerMiddleware = multer().any();
app.use(multerMiddleware);
app.use("/upload",function(req,res){
console.log(req.files);
var oFile = req.files[0];
var path = "upload/"+ oFile.originalname;
var buf = oFile.buffer;
fs.writeFileSync(path,buf);
});
res:
$ node server2
[ { fieldname: 'f1',
originalname: 'test.txt',
encoding: '7bit',
mimetype: 'text/plain',
buffer: <Buffer 36 36 36 36 36>,
size: 5 } ]

文件下载download
var express = require("express");
var app = express();
app.listen(9000);
app.use("/download",function(req,res){
res.download(__filename);//下载自己
});
res:

db数据库
mysql与 mongodb
1.mysql
npm i mysql 驱动
连接数据库
var db = mysql.createConnection({
host,user,password,database
});
操作数据库:
db.query(sql,fn(err,data){...});
关闭数据库:
db.end(); 不是close();
//查询
select * from user_table;
select * from user_table where username="aaa" and password="123";
插入
insert into user_table(username,password) values("aaa","123");
2.mongodb
mysql mongodb —— json
关系型数据库 非关系型数据库
库 database database
表 table collection集合
行 row document文档
列 col field属性
安装目录: C:\Program Files\MongoDB\Server\3.3\bin
mongod 服务器端
mongo 客户端
配置环境变量:
;C:\Program Files\MongoDB\Server\3.3\bin
执行:
mongod --dbpath C:\data\db 默认的配置 以后启动 mogod
mongod --dbpath C:\mongoData 每次启动服务器必须带上完整路径
常用命令:
show dbs显示所有数据 —— 只显示有数据的库名称 show databases
db 查看用户当前所在的数据库
use 切换数据库、创建数据库
插入数据
db.user.insert({a:1}); 包括创建表 和 插入数据
db.user.insertOne( { x: 1 } );
db.user.find();
db.user.find({x:1});
select * from user_table where x="1"
use 20180713
db.user_table.insert({username:"aaa",password:"123",age:1});
db.user_table.insert({username:"aaa1",password:"123",age:18});
db.user_table.insert({username:"aaa2",password:"123",age:30});
db.user_table.insert({username:"aaa3",password:"123",age:60});
db.user_table.find({},{username:0/1,"_id":0});
select password from user_table
db.getCollection("user_table").find();
db.user_table.find().pretty() 美化json
show collections 查询当前库里面所有的表
db.user_table.find( { age: { $gt: 18 } } ,{"_id":0}) >
db.user_table.find( { age: { $gte: 18 } } ,{"_id":0}) >=
db.user_table.find( { age: { $lt: 18 } } ,{"_id":0}) <
db.user_table.find( { age: { $lte: 18 } } ,{"_id":0}) <=
db.user_table.find( {age:{ $gt: 18, $lt: 60 }},{"_id":0}) >18 <60
db.user_table.find({},{"_id":0}).sort( { age: -1 } ); 1 -1
1 :降序 desc
-1:升序 asc
db.user_table.find({},{"_id":0}).limit(2)
db.user_table.find({},{"_id":0}).limit(2).skip(0)
limit(pageSize).skip(beginIndex);
beginIndex = pageSize*(pageNo-1)
pageSize 2条
pageNo beginIndex
1 0
2 2
3 4
4 6
11条数据 每页2条 一共几页? Math.ceil(total/pageSize);
db.user_table.count();
db.collection.insert()
db.collection.insertOne() 同 insert
db.collection.insertMany([ <document 1> , <document 2>, ... ])
db.user_table.insertMany([
{username:"xxx1",password"xxx1",age:1},
{username:"xxx2",password"xxx2",age:2},
{username:"xxx3",password"xxx3",age:3}
]);
db.user_table.insertMany([
{username:"xxx1",password:"xxx1",age:1},
{username:"xxx2",password:"xxx2",age:2},
{username:"xxx3",password:"xxx3",age:3}
]);
db.user_table.insert([
{username:"xxx11",password:"xxx1",age:1},
{username:"xxx22",password:"xxx2",age:2},
{username:"xxx33",password:"xxx3",age:3}
]);
update
$set:修改或者添加
db.user_table.update(
{ username: "aaa" },
{
$set: {username: "AAA", password: "AAA",age: 100}
}
)
db.user_table.update( { username: "AAA" }, { $unset: { password: 1 } } )
$unset 删除属性
db.user_table.find({},{"_id":0});
db.user_table.update(
{ username: "aaa1" },
{ $set: { username : "AAA1" } },
{ multi: true} 可以修改多条数据 默认是false
)
db.user_table.updateOne(
{ username: "aaa3" },
{ $set: { username : "AAA3" } }
);
db.user_table.updateMany(
{ username: "aaa2" },
{ $set: { username : "AAA2" } }
);
删除 没有delete 用remove
db.user_table.deleteOne( { "_id" : ObjectId("5b48548b86ffbcc901fc4ac2") } );
db.user_table.deleteOne( { "age" : {$gte:1}} );
db.user_table.deleteMany( { "age" : {$gte:1}} );
db.user_table.remove( { "age" : {$gte:1}} );
db.user_table.remove( { "age" : {$gte:1}},{justOne:true} );
justOne:true 只删除一条 默认false删除所有
注意:必须在cmd环境下运行
导入数据:
mongoimport --db 20180713 --collection user_table --drop --file xxx.txt
导出数据
mongoexport --db 20180713 --collection user_table --out xxx.txt
xxx.txt
{username:"xxx1",password:"xxx1",age:1}
{username:"xxx2",password:"xxx2",age:2}
{username:"xxx3",password:"xxx3",age:3}
mongodb&& node
npm i mongodb
使用方法:https://www.npmjs.com/package/mongodb
mongodb浏览器的可视化
adminMongo https://github.com/mrvautin/adminMongo
mongoose:
mongodb/mongoose
DOM 文档对象模型
ODM 对象文档模型
npm i mongoose
https://www.npmjs.com/package/mongoose
db.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost/20180716');
//定义表结构的数据类型
var userSchema = new Schema({
user:String,
pass:String
});
//定义表 表结构都会带s,只能有一个s 控制台查询:db.user_tables.find();
var UserModel = mongoose.model('user_table', userSchema);
//创建数据 行 document
var oUser = new UserModel({user:"bbb"});
oUser.pass = "123";
//db.user_table.insert(document);
//插入
oUser.save(function (err, result) {
console.log(err, result);
//查询
//find
UserModel.find(function (err, data) {
console.log(err, data);
})
});
res:
$ node db.js
(node:9996) DeprecationWarning: current URL string parser is deprecated, and wil
l be removed in a future version. To use the new parser, pass option { useNewUrl
Parser: true } to MongoClient.connect.
null { _id: 5b4c780013c2a1270cd6c0fd,
user: 'bbb',
pass: '123',
__v: 0 }
null [ { _id: 5b4c76c859b0432a1c4e0626,
user: 'bbb',
pass: '123',
__v: 0 },
{ _id: 5b4c780013c2a1270cd6c0fd,
user: 'bbb',
pass: '123',
__v: 0 } ]
db2.js
连接成功测试
/*var mongoose = require('mongoose');
var Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost/716');
var db = mongoose.connection;
db.on('error', function() {
console.log("连接失败");
});
db.once('open', function() {
console.log("连接已经建立");
});*/
//或者
/*var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/20180716',function(err) {
if(err){
console.log("连接失败");
} else {
console.log("连接已经建立");
}
});*/
res:
$ node db2
(node:11436) DeprecationWarning: current URL string parser is deprecated, and wi
ll be removed in a future version. To use the new parser, pass option { useNewUr
lParser: true } to MongoClient.connect.
连接已经建立
心中那自由的世界,如此的清澈高远!
5. 文件上传下载 与 db数据库的更多相关文章
- jm解决乱码问题-参数化-数据库操作-文件上传下载
jm解决乱码问题-参数化-数据库操作-文件上传下载 如果JM出果运行结果是乱码(解决中文BODY乱码的问题) 找到JM的安装路径,例如:C:\apache-jmeter-3.1\bin 用UE打开jm ...
- Django文件上传下载与富文本编辑框
django文件上传下载 上传 配置settings.py # 设定文件的访问路径,如:访问http://127.0.0.1:8000/media/就可以获取文件 MEDIA_URL = '/medi ...
- commons-fileupload实现文件上传下载
commons-fileupload是Apache提供的一个实现文件上传下载的简单,有效途径,需要commons-io包的支持,本文是一个简单的示例 上传页面,注意设置响应头 <body> ...
- JavaWeb实现文件上传下载功能实例解析
转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...
- nodejs+express-实现文件上传下载管理的网站
Nodejs+Express-实现文件上传下载管理的网站 项目Github地址(对你有帮助记得给星哟):https://github.com/qcer/updo 后端:基于nodejs的express ...
- JavaWeb 文件上传下载
1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端,从服务器端下载文件到本地的过程.例如目前网站需要上传头像.上传下载图片或网盘等功能都是利用文件上传下 ...
- SpringMVC整合fastdfs-client-java实现web文件上传下载
原文:http://blog.csdn.net/wlwlwlwl015/article/details/52682153 本篇blog主要记录一下SpringMVC整合FastDFS的Java客户端实 ...
- SpringMVC ajax技术无刷新文件上传下载删除示例
参考 Spring MVC中上传文件实例 SpringMVC结合ajaxfileupload.js实现ajax无刷新文件上传 Spring MVC 文件上传下载 (FileOperateUtil.ja ...
- django 12天(跨域,文件上传,下载,cookie,session)
django 12天(跨域,文件上传,下载) 跨域 什么是跨域 1.协议不同 2.端口不同 3.主机不同 如何解决跨域 1.安装django-cors-headers模块 2.在settings.py ...
随机推荐
- .Net转Java.02.数据类型
.NET中常见的数据类型分类分别是值类型和引用类型 值类型包括(基元类型.struct.枚举) 引用类型包括(类.类.数组.接口.指针) Java分为,基本类型和类 C# Java 值类型 ...
- Android的Databinding-单向绑定
两种方式实现观察绑定. 一.POJO类实现android.databinding.Observable,在属性set方法中调用notifyPropertyChanged(BR.lastName); 其 ...
- Css3 实现循环留言滚动效果(一)
一.常见留言滚动效果示例 html代码 <div class="runList"> <div class="runitem"> < ...
- 【JVM】垃圾收集器
程序计数器.Java虚拟机栈.本地方法栈分配的内存是确定的,生命周期与线程同样.所以不须要过多考虑回收问题. 而Java堆和方法区仅仅有运行时才知道有哪些对象被创建,须要多少内存,这部分的内存分配和回 ...
- Hadoop+HBase 集群搭建
Hadoop+HBase 集群搭建 1. 环境准备 说明:本次集群搭建使用系统版本Centos 7.5 ,软件版本 V3.1.1. 1.1 配置说明 本次集群搭建共三台机器,具体说明下: 主机名 IP ...
- SQL Server 性能优化实战系列(二)
SQL Server datetime数据类型设计.优化误区 一.场景 在SQL Server 2005中,有一个表TestDatetime,其中Dates这个字段的数据类型是datetime,如果你 ...
- wps直接打开CVS文件会把长串数字订单号最后4位变为0
WPS打开CVS文件,发现里面的长串数字订单号后4位全变成0了,而且是以科学计数法来显示了 上网查了下,不能直接打开,得先在WPS(OFFICE中也一样)中新建一个空白表格,然后用菜单里的数据导入功能 ...
- atitit 读书与获取知识资料的attilax的总结.docx
atitit 读书与获取知识资料的attilax的总结.docx 1.1. 读书即是获取知识,获取资料,获取信息的一种方式 2 2. 获取资料信息的目的,有什么作用,有什么用途?? 2 2.1. 扩大 ...
- 华为AR配置内部服务器示例(只有1个公网IP)
AR配置公网和私网用户都可以通过公网地址访问内部服务器示例(只有1个公网IP) 适用于:V200R003C01及以后的系统软件版本. 组网需求: 由于只有1个公网IP(100.100.1.2),想实现 ...
- Git操作自动触发企业微信机器人webhook
[本文出自天外归云的博客园] 背景 在git做一些merge或push的操作,我们希望可以自动在企业微信群发送自定义的通知. 服务代码 这里选用php作为网络服务的开发语言,关键的代码如下(githo ...