原生node用fs和http完成檔案上傳到伺服器
阿新 • • 發佈:2018-11-03
var http=require("http"); var fs=require("fs"); http.createServer(function(req,res){ res.writeHead(200,{"Content-type":"text/html;charset=UTF-8","Access-Control-Allow-Origin":"*"}); if (req.method.toLowerCase()=="post") { //新建一個空陣列接受流的資訊 var chunks=[]; //獲取長度 let num=0; req.on("data",function(chunk){ chunks.push(chunk); num+=chunk.length; }); req.on("end",function(){ //最終流的內容本體 var buffer=Buffer.concat(chunks,num); //新建陣列接收出去\r\n的資料下標 let rems=[]; //根據\r\n分離資料和報頭 for (var i = 0; i < buffer.length; i++) { let v=buffer[i]; let v2=buffer[i+1]; // 10代表\n 13代表\r if (v==13&&v2==10) { rems.push(i) } }//for //獲取上傳圖片資訊 let picmsg_1 = buffer.slice(rems[0]+2,rems[1]).toString(); console.log(picmsg_1); let filename = picmsg_1.match(/filename=".*"/g)[0].split('"')[1]; console.log(filename); //圖片資料 var nbuf = buffer.slice(rems[3]+2,rems[rems.length-2]); let address="./"+filename; //建立空檔案並寫入內容 fs.writeFile(address,nbuf,function(err){ if (err) { console.log(err); }else{ console.log("建立成功") } }) }) res.end(); } }).listen(3000,"localhost")
html網頁
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form action="http://localhost:3000/" method="POST" enctype="multipart/form-data"> <input type="file" name="file"><br/> <input type="submit" value="上傳"/> </form> </body> </html>