# node+express實現圖片上傳功能 ###### tags: `Node.js` ## 安裝express 安裝在資料夾中 安装好之后,express 包就放在了工程目录下的 node_modules 目录中,因此在代码中只需要通过 require('express') 的方式就好,无需指定第三方包路径。 ```shell= sudo npm install express --save ``` ## 新建package.json package.json 它是一種 CommonJS 規定用來描述包的文件, 是一個包含 json 格式的說明文件, 裡面可以定義相依的相關套件以及應用程式的資訊 ```jsonld= { "name": "node-app", "version": "1.0.0", "dependencies": { "express": "^4.16.2" } } ``` 接著運行 ```shell= sudo npm install ``` ## 新建app.js ```javascript= 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 中提供靜態檔案+處理上傳的圖片 上面的app.js只是單純的hello world程式 接下來要透過Express提供static的檔案 如果要提供影像、CSS 檔案和 JavaScript 檔案等之類的靜態檔案, 請使用 Express 中的 express.static 內建中介軟體函數。 而這邊我們是使用網頁 所以透過html進行 - start.html ```htmlembedded= <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>請上傳您的文件</title> </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> ``` - upload.html ```htmlembedded= <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> ``` - app.js (最終版) ```javascript= 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); }); ```