安装express,创建项目,添加sqlite3模块

express --sessions --css stylus --ejs myhotel
npm install sqlite3
node app #运行方式

源代码如下:

网站入口app.js

var express = require('express');
var routes = require('./routes');
var photo = require('./routes/photo');
var http = require('http');
var path = require('path'); var app = express(); // all environments
app.set('port', process.env.PORT || 80);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.bodyParser({ keepExtensions: true, uploadDir: __dirname + '/uploads' } ));
app.use(express.methodOverride());
app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(app.router);
app.use(require('stylus').middleware(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'public'))); // development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
} app.get('/', routes.index);
app.post('/upload', photo.upload);
app.get('/list', photo.list); http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});

connect.bodyParser()会有报错,替换如下

var multipart = require('connect-multiparty');

app.use(express.urlencoded()); // Replace for depricated connect.bodyParser()
app.use(express.json()); // Replace for depricated connect.bodyParser()
app.use(multipart({ uploadDir: __dirname + '/uploads' })) // Replace for depricated connect.bodyParser()

控制与路由

routes/index.js

exports.index = function(req, res){
res.render('index', { title: 'Express' });
};

routes/photo.js

var sqlite3 = require("sqlite3"),
fs = require("fs"); var db = new sqlite3.Database("photos.db");
/*
* GET users listing.
*/ exports.list = function(req, res){ var photos = [];
db.serialize(function() {
db.each("SELECT name, path FROM photos", function(err, row) {
photos.push({name: row.name, path:row.path})
}, function(){
res.render("photos",{photos:photos})
});
});
}; exports.upload = function(req, res){ var name = req.param('name', null); fs.readFile(req.files.image.path, function (err, data) {
// ...
if(err) {throw err;} var hash = require('crypto').createHash('md5');
var target_path = 'images/uploads/' + hash.update(data+"").digest('hex') + "." + req.files.image.name.split(".")[1]; fs.writeFile("./public/"+ target_path, data, function (err) {
if(err) {throw err;} db.serialize(function() {
var stmt = db.prepare("INSERT INTO photos VALUES (?,?)");
stmt.run(name,target_path);
stmt.finalize();
res.redirect("/list");
});
// db.close();
});
});
};

视图代码

view/index.ejs

<!DOCTYPE html>
<html>
<head></head> <body>
<form enctype="multipart/form-data" action="/upload" method="POST">
<input type="text" id="name" name="name"></input>
Send this file: <input name="image" id="image" type="file" />
<input name="tt" type="submit" value="Send File" />
</form> </body>
</html>

view/photos.ejs

<!DOCTYPE html>
<html>
<head>
<title>AB</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<ul class="nostyle">
<% photos.forEach(function(photo){ %>
<li><%= photo.name %> <img src="<%= photo.path %>" /></li>
<% }) %>
</ul>
</body>
</html>

样式控制public/stylesheets/style.styl

body
padding: 50px
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif
a
color: #00B7FF
.nostyle
list-style-type: circle

express文件上传的更多相关文章

  1. express文件上传中间件Multer详解

    express文件上传中间件Multer详解 转载自:https://www.cnblogs.com/chengdabelief/p/6580874.html   Express默认并不处理HTTP请 ...

  2. Express文件上传之Multer

    Express文件上传之Multer Multer是一个nodejs中间件,用来处理http提交multipart/form-data,也就是文件上传.它是在busboy的基础上开发的. 在我看来,M ...

  3. Nodejs express 文件上传

    文件上传 以下我们创建一个用于上传文件的表单,使用 POST 方法,表单 enctype 属性设置为 multipart/form-data. index.htm 文件代码修改如下: <html ...

  4. 47.Express文件上传

    转自:http://www.runoob.com/nodejs/nodejs-express-framework.html 文件上传 以下我们创建一个用于上传文件的表单,使用 POST 方法,表单 e ...

  5. node+express实现文件上传功能

    在进行node web开发时,我们可能经常遇到上传文件的问题,这一块如果我们没有经验,可能会遇到很多坑,下面我将跟大家分享一下,实现文件上传的一些方式. 一.node+express文件上传的常用方式 ...

  6. Node.js:上传文件,服务端如何获取文件上传进度

    内容概述 multer是常用的Express文件上传中间件.服务端如何获取文件上传的进度,是使用的过程中,很常见的一个问题.在SF上也有同学问了类似问题<nodejs multer有没有查看文件 ...

  7. node+express4+multiparty实现简单文件上传

    文件上传 var fs = require('fs'); var express = require('express'); var multiparty = require('multiparty' ...

  8. 使用nodejs+express(4.x+)实现文件上传

    最简单的做法是通过“connect-multiparty”中间件实现上传. 通过在项目中npm install connect-multiparty进行安装. 用法: var multipart = ...

  9. Nodejs进阶:基于express+multer的文件上传

    关于作者 程序猿小卡,前腾讯IMWEB团队成员,阿里云栖社区专家博主.欢迎加入 Express前端交流群(197339705). 正在填坑:<Nodejs学习笔记> / <Expre ...

随机推荐

  1. 测试heightlight

    var a = '综合型律师事务所'; if (a == '综合型律师事务所') { initradio('ls_classes', '综合型律师事务所'); } else { initradio(' ...

  2. Struts学习之流程汇总

    struts2 架构图如下图所示: 依照上图,我们可以看出一个请求在struts的处理大概有如下步骤: 1.客户端初始化一个指向Servlet容器(例如Tomcat)的请求: 2.这个请求经过一系列的 ...

  3. 监听器和web国际化

    一.监听器 1.监听器:监听器就是一个java程序,功能是监听另一个java对象变化(方法调用.属性变更) 2.监听器监听过程:事件源.事件对象.监听器对象.操作事件源 1).存在被监听对象(事件源) ...

  4. 联想V480关闭UEFI安装Win7

       联想V480关闭UEFI安装Win7 http://www.dadclab.com/archives/3283.jiecao 故事背景 兔兔牛入了一枚Lenovo V480,预装Win8,想换成 ...

  5. 删除windows7保留分区

    在系统里以管理员运行CMD.exe键入diskpartsel disk 0  (select 选择硬盘)list vol  (查看卷)sel vol 0  (选择卷,0为保留分区)inactive ( ...

  6. nat123外网SSH访问内网LINUX的N种方法

    一,动态公网IP环境 1,环境描述: 路由器分配的是动态公网IP,且有路由管理权限,LINUX主机部署在路由内网.如何实现外网SSH访问内网LINUX主机? 2,解决方案: 使用nat123动态域名解 ...

  7. 虚拟机的静态内部 IP 地址

     这是什么? 借助最新的 PowerShell 版本,您现在能够定义和配置特定的内部 IP 地址,该地址可以静态分配给部署在虚拟网络中的 IaaS 虚拟机.使用此功能,您可以直接为虚拟机配置内部 ...

  8. cocos2d-x 3.0 新特性样例

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzMyMTMyOA==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  9. curl向web服务器发送json数据

    c++使用libcurl: /* *g++ demo.cpp -g -Wall -lcurl */ #include <string.h> #include <stdlib.h> ...

  10. ubuntu 中 ThinkPHP 上传文件无法得到文件名

    在 419-424 行.