express文件上传
安装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文件上传的更多相关文章
- express文件上传中间件Multer详解
express文件上传中间件Multer详解 转载自:https://www.cnblogs.com/chengdabelief/p/6580874.html Express默认并不处理HTTP请 ...
- Express文件上传之Multer
Express文件上传之Multer Multer是一个nodejs中间件,用来处理http提交multipart/form-data,也就是文件上传.它是在busboy的基础上开发的. 在我看来,M ...
- Nodejs express 文件上传
文件上传 以下我们创建一个用于上传文件的表单,使用 POST 方法,表单 enctype 属性设置为 multipart/form-data. index.htm 文件代码修改如下: <html ...
- 47.Express文件上传
转自:http://www.runoob.com/nodejs/nodejs-express-framework.html 文件上传 以下我们创建一个用于上传文件的表单,使用 POST 方法,表单 e ...
- node+express实现文件上传功能
在进行node web开发时,我们可能经常遇到上传文件的问题,这一块如果我们没有经验,可能会遇到很多坑,下面我将跟大家分享一下,实现文件上传的一些方式. 一.node+express文件上传的常用方式 ...
- Node.js:上传文件,服务端如何获取文件上传进度
内容概述 multer是常用的Express文件上传中间件.服务端如何获取文件上传的进度,是使用的过程中,很常见的一个问题.在SF上也有同学问了类似问题<nodejs multer有没有查看文件 ...
- node+express4+multiparty实现简单文件上传
文件上传 var fs = require('fs'); var express = require('express'); var multiparty = require('multiparty' ...
- 使用nodejs+express(4.x+)实现文件上传
最简单的做法是通过“connect-multiparty”中间件实现上传. 通过在项目中npm install connect-multiparty进行安装. 用法: var multipart = ...
- Nodejs进阶:基于express+multer的文件上传
关于作者 程序猿小卡,前腾讯IMWEB团队成员,阿里云栖社区专家博主.欢迎加入 Express前端交流群(197339705). 正在填坑:<Nodejs学习笔记> / <Expre ...
随机推荐
- 使用 UML 进行业务建模:理解业务用例与系统用例的相似和不同之处
使用 UML 进行业务建模:理解业务用例与系统用例的相似和不同之处 作者:Arthur V. English 出处:IBM 本文内容包括: 背景 业务用例模型与系统用例模型有什么相似之处? 业 ...
- BZOJ 1801: [Ahoi2009]chess 中国象棋( dp )
dp(i, j, k)表示考虑了前i行, 放了0个炮的有j列, 放了1个炮的有k列. 时间复杂度O(NM^2) -------------------------------------------- ...
- Hadoop经典面试题(转)
单项选择题 1. 下面哪个程序负责 HDFS 数据存储. a)NameNode b)Jobtracker c)Datanode d)secondaryNameNode e)tasktracker 2. ...
- HTML中小问题
1.a标签不添加href这个属性时,不会出现鼠标变成手型~
- ThinkPHP第二十四天(JQuery常用方法、TP自动验证)
---恢复内容开始--- 1.JQuery常用方法 A:JS中可以用json格式数据当做数组使用,如var validate={username:false,pwd:false,pwded:false ...
- hdu 4033 Regular Polygon 计算几何 二分+余弦定理
题目链接 给一个n个顶点的正多边形, 给出多边形内部一个点到n个顶点的距离, 让你求出这个多边形的边长. 二分边长, 然后用余弦定理求出给出的相邻的两个边之间的夹角, 看所有的加起来是不是2Pi. # ...
- php环境配置优化
Php相关配置 – 基础 max_execution_time = 30 max_input_time = 60 memory_limit = 128 Mmax_input_vars = 1000 r ...
- Azure 网站和通配符域
本文章由Azure 网站团队软件开发工程师Michael Candido 撰写 一些 Web 应用程序需要使用多个子域,在某些情况下还需要动态添加新的子域.例如,一个多租户 Web 应用程序可使 ...
- SPOJ 220 Relevant Phrases of Annihilation(后缀数组+二分答案)
[题目链接] http://www.spoj.pl/problems/PHRASES/ [题目大意] 求在每个字符串中出现至少两次的最长的子串 [题解] 注意到这么几个关键点:最长,至少两次,每个字符 ...
- 第七届河南省赛10402: C.机器人(扩展欧几里德)
10402: C.机器人 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 53 Solved: 19 [Submit][Status][Web Boa ...