安装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. php study plan personal

    Php study schedule personal: 1. php intro + upper : imooc2. video course: php100, houdunwang (togeth ...

  2. hdu 4292 Food 网络流

    题目链接 给你f种食物, 以及每种食物的个数, d种饮料, 以及个数, n个人, 以及每个人可以接受的食物种类和饮料种类. 每个人必须得到一种食物和一种饮料. 问最后得到满足的人的个数. 因为一个人只 ...

  3. tocken和ticket的数据模型;

    /* jshint -W079 */ /* jshint -W020 */ "use strict"; var _ = require("lodash"); m ...

  4. STL-multimap

    转自:http://www.cnblogs.com/xiaoka/archive/2011/08/09/2132342.html multimap提供了可以一种可以有重复键值的STL map类型.其插 ...

  5. Clementine 12.0 的使用(因为比较少用,项目中用到才开始接触写一下自己的使用方法)

    首先我是根据excel的文件做的训练,就以excel来做介绍 1.打开Clementine 12.0 软件 点击软件下方的 ”源“ 即你要做训练的数据源.因为是excel文件双击excel. 2.双击 ...

  6. 2015.8.3 Java

    今天继续学习Java  用的是eclipse IDE 这个ide怪怪的,但是有一个很方便的功能 就是通过右键选择source 可以点击Generate Getters and Setters生成属性的 ...

  7. mysql 数据备份

    一.备份数据库并下载到本地[db_backup.php] php代码: <?php // 数据库参数(此处测试,直接给定,项目中使用配置文件) $cfg_dbname = 'blog'; $cf ...

  8. AsyncSocket 使用

    今天使用AsyncSocket模拟及时通信,在这里记录一下,免得以后自己又犯相同的错误 1>创建客户端和服务器socket /** * 设置socket */ - (void)setupSock ...

  9. KMP算法番外篇--求解next数组

    KMP算法实现字符串的模式匹配的时间复杂度比朴素的模式匹配好很多,但是它时间效率的提高是有前提的,那就是:模式串的重复率很高,不然它的效率也不会凸显出来.在实际的应用中,KMP算法不算是使用率很高的一 ...

  10. mysql中随机取出几条数据

    SELECT t1.id,title,extName,cover,url FROM shop_articles AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT M ...