1. 程式人生 > >這是用nodejs寫的上傳圖片

這是用nodejs寫的上傳圖片

最近剛接觸nodejs有點懵

上傳圖片的話,首先得有一個html頁面 下面是一個非常非常LOW的上傳圖片的頁面

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Document</title>
 6 </head>
 7 <body>
 8     <form action="/dopost" method="post" enctype="multipart/form-data"
> 9 圖片:<input type="file" name="image"><br/> 10 <button>提交</button><br/> 11 </form> 12 </body> 13 </html>

上傳檔案三要素 可以複習一下

然後就是nodejs的程式碼,再做這個之前 nodejs 必須要自行安裝倆個模組:   

silly-datetime (時間模組  後面也可加 --save)

formidable (處理上傳檔案的模組 自行了解一下)

直接命令安裝就可以!

下面就是上傳圖片的程式碼:

 1 // formidable  這個模組是用來處理上傳檔案的
 2 
 3 var http = require('http');
 4 var fs = require('fs');
 5 var path = require('path');
 6 // 時間模組
 7 var datetime = require('silly-datetime');
 8 // 檔案上傳模組
 9 var formidable = require('formidable');
10 
11 
12 var hostname = '127.0.0.1';
13 var port = '3000';
14 15 var server = http.createServer(function (req,res) { 16 // 處理請求和響應 17 // 遮蔽 favicon.ico 18 if(req.url == '/favicon.ico') {return}; 19 if(req.url == '/formfile') { 20 21 // ./formfile.html 就是一個簡單的html頁面 22 // 擁有form 能提交檔案即可 23 fs.readFile('./formfile.html',function(err,data) { 24 res.end(data); 25 }); 26 // dopost 是form表單中的action 27 }else if (req.url == '/dopost' && req.method.toLowerCase() == 'post') { 28 // 用formidable 來處理上傳檔案 29 var form = new formidable.IncomingForm(); 30 31 // 設定上傳檔案 存放位置 32 form.uploadDir = "./uploads"; 33 34 form.parse(req,function(err,fields,files) { 35 36 console.log(fields); 37 console.log(files); 38 39 // 改檔名 40 // 時間 + 隨機數 + 字尾(檔名) 41 42 // 引入的時間模組 silly-datetime 可自行下載 43 var time = datetime.format(new Date(),'YYYYMMDDHHmmss'); 44 // 生產5位的隨機數 45 var num = parseInt(Math.random()*100000); 46 // 獲取上傳檔案的檔名 47 var extname = path.extname(files.image.name); 48 49 // 獲取舊名字 50 // __dirname 代表當前專案 的根目錄 51 // 拼湊完整路徑 52 var oldname = __dirname + '/' + files.image.path; 53 54 // 拼接新名 55 var newname = __dirname + '/uploads/'+ time + num + extname; 56 // 執行改名 57 fs.rename(oldname , newname,function(err){ 58 res.writeHead(200,{"Content-Type":"text/html;charset = utf-8"}); 59 res.end('ok'); 60 }); 61 }); 62 63 }else{ 64 res.end('404'); 65 } 66 67 }); 68 69 70 // function 可寫可不寫 71 server.listen(port,hostname,function(){ 72 //這裡的function 可省略 ... 73 console.log('我們都太假裝'); 74 });

這樣就會上傳到指定目錄了!         

大牛們不足指出還請給小白點建議!