本篇文章適用於node剛剛入門的讀者。html
本篇文章使用node+express實現了一個簡單的圖片上傳功能:用戶點擊圖片上傳,會跳轉到上傳成功頁面並展現上傳的圖片。node
一直想找資料入門node,試着一步步實現一個功能,都沒有合適的資料。直到看到www.nodebeginner.org/index-zh-cn… ,這本書教你如何一步一步結合基本的API搭建一個簡單的應用,實現了簡單的圖片上傳功能。我看完以後終於感受本身基本入門node了。文章中有附源碼地址,github.com/manuelkiess… ,若是你感受尚未入門node,能夠試試這本書。git
固然個人建議是跟着教程一步步修改代碼,而不是直接將源碼clone下來。github
文章到後面給出頁面展現的html是以response.write(body);
的方式寫的express
function start(response) {
console.log("Request handler 'start' was called.");
var body = '<html>'+
'<head>'+
'<meta http-equiv="Content-Type" content="text/html; '+
'charset=UTF-8" />'+
'</head>'+
'<body>'+
'<form action="/upload" enctype="multipart/form-data" '+
'method="post">'+
'<input type="file" name="upload" multiple="multiple">'+
'<input type="submit" value="Upload file" />'+
'</form>'+
'</body>'+
'</html>';
response.writeHead(200, {"Content-Type": "text/html"});
response.write(body);
response.end();
}複製代碼
實際應用中確定不能以這樣的方式寫html文件,因此接下來就教你用node+express實現一樣的功能,使咱們的代碼看起來更優雅npm
mac+node(v9.2.0)+expressjson
express官網:www.expressjs.com.cn/bash
新建文件夾node-app
,在文件夾下新建package.json
文件app
{
"name": "node-app",
"version": "0.0.1",
"dependencies": {
"express": "^4.16.2",
}
}複製代碼
運行npm install
。新建app.js
,代碼以下post
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello World!');
});
var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;
console.log('Example app listening at http://%s:%s', host, port);
});複製代碼
運行node app.js
,打開localhost:3000,應用已經跑起來了
下面利用 Express 託管靜態文件,在node-app
下新建文件夾public
,新建兩個html文件
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>請上傳您的文件</title>
</head>
<body>
<form action="./upload.html" enctype="multipart/form-data" method="get">
<input type="file" name="upload" multiple="multiple">
<input type="submit" value="Upload file" />
</form>
</body>
</html>複製代碼
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>上傳成功</title>
</head>
<body>
<h1>上傳成功</h1>
</body>
</html>複製代碼
修改app.js
,增長app.use('/public', express.static('public'));
。修改後app.js
以下
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.use('/public', express.static('public'));
var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;
console.log('Example app listening at http://%s:%s', host, port);
});複製代碼
如今,public 目錄下面的文件就能夠訪問了。
重啓node服務,打開http://localhost:3000/public/start.html
,選擇文件上傳以後,頁面就會自動跳轉到上傳成功頁面
使用模塊formidable
處理請求數據。在package.json
中增長
"dependencies": {
"express": "^4.16.2",
"formidable": "^1.1.1"
}複製代碼
運行npm install
。
文件上傳天然要用到post請求,更改start.html
,改成method="post"
<form action="/upload" enctype="multipart/form-data" method="post">
<input type="file" name="upload" multiple="multiple">
<input type="submit" value="Upload file" />
</form>複製代碼
處理post請求用到的Express的路由
修改後的app.js
以下:
var express = require('express');
var app = express();
var formidable = require("formidable");
fs = require("fs");
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.use('/public', express.static('public'));
app.post('/upload', function (req, res) {
var form = new formidable.IncomingForm();
console.log("about to parse");
form.parse(req, function(error, fields, files) {
console.log("parsing done");
console.log(files.upload.path);
fs.writeFileSync("public/test.png", fs.readFileSync(files.upload.path));
res.redirect("/public/upload.html") ;
});
});
var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;
console.log('Example app listening at http://%s:%s', host, port);
});複製代碼
在public
文件夾下修改upload.html
,
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>上傳成功</title>
</head>
<body>
<h1>上傳成功</h1>
<img src="/public/test.png"/>
</body>
</html>複製代碼
嗯,大功告成啦。從新啓動服務,打開 http://localhost:3000/public/start.html 選擇一個圖片上傳,就能看到本身上傳的圖片了!
感謝您的閱讀!這是個人學習過程,希望對您有幫助。