设计了一个可用的Node.js文件服务器.md
2017-08-16 20:45
519 查看
最近跟着自己家人学了Node.js和PHP,觉得服务器技术简单实用很好玩。
文件服务器如果纯用C/C++写的话真心很麻烦,Node.js却十分容易。
不写不知道学不会,还是写一个吧。:)
文件服务器如果纯用C/C++写的话真心很麻烦,Node.js却十分容易。
不写不知道学不会,还是写一个吧。:)
/* 2017年8月16日星期三 18:51 Node.js文件服务器:可以通过远程访问目标电脑文件。 author:dalerkd 特点: 支持中文路径 支持返回上一层 基础代码参考自:http://www.cnblogs.com/fengfengtk/p/4001985.html 作者:天空中的蜂蜂 原来的代码不能浏览多级目录,不能下载文件,不能阅读和下载路径或者文件名的内容。 所以我重点解决了这些问题。让它能用了。 */ //文件大小单位自动转换 //来自http://blog.csdn.net/fengshizty/article/details/26226593 作者Andyzty function sizeConver(limit){ var size = ""; if( limit < 0.1 * 1024 ){ //如果小于0.1KB转化成B size = limit.toFixed(2) + "B"; }else if(limit < 0.1 * 1024 * 1024 ){//如果小于0.1MB转化成KB size = (limit / 1024).toFixed(2) + "KB"; }else if(limit < 0.1 * 1024 * 1024 * 1024){ //如果小于0.1GB转化成MB size = (limit / (1024 * 1024)).toFixed(2) + "MB"; }else{ //其他转化成GB size = (limit / (1024 * 1024 * 1024)).toFixed(2) + "GB"; } var sizestr = size + ""; var len = sizestr.indexOf("\."); var dec = sizestr.substr(len + 1, 2); if(dec == "00"){//当小数点后为00时 去掉小数部分 return sizestr.substring(0,len) + sizestr.substr(len + 3,2); } return sizestr; } var http = require("http"); var url = require("url"); var fs = require("fs"); var server = http.createServer(function(req, res){ var req_path = url.parse(req.url).path; console.log("Log: "+req_path); var decodePath = decodeURI(req_path);//chinese or space or other char var filepath = __dirname + decodePath; filepath = filepath.replace(/\//g,'\\');//不转也可以,但为了斜线的一致 console.log('Debug '+filepath); fs.exists(filepath, function(exists) { console.log('Debug '+exists); if(exists) { fs.stat(filepath, function(err, stats) { if(err) { res.writeHead(500, {'Content-Type' : 'text/html;charset=utf8'}); res.end('<div styel="color:black;font-size:22px;">server error</div>'); }else{ if(stats.isFile()) { let file = fs.createReadStream(filepath); res.writeHead(200, {'Content-Type' : 'application/octet-stream'}); file.pipe(res); }else{ fs.readdir( filepath, function(err, files) { let str = ''; str += '<table><tr align="left"><th>Name</th><th>Type</th><th>Size</th></tr>'; for(let i in files) { /*获取文件路径,判断属性,打印属性*/ var rootPath=''; if(req_path!='/') { rootPath = req_path; } let tempFilePath = __dirname + rootPath + '/' + files[i]; str += '<tr><td>'; str += '<a href=\"' + rootPath +'/'+ files[i] + '\">' + files[i] + '</a>'; str += '</td>'; //获取属性 try{//防止不存在的路径 var statesInfo = fs.statSync(tempFilePath)// function(err, stats) str += '<td>'; if(statesInfo.isFile()) { str += 'File'; } else { str += 'Folder'; } var tempSize=sizeConver(statesInfo.size); str += '</td><td>'+tempSize+'</td>'; } catch(err) { continue; } finally { str += '</tr>'; } } var fatherPath = req_path; if(fatherPath=='') { fatherPath=='/' } var tempStart = fatherPath.indexOf('/'); if(tempStart!=0)//如果第一个字符不是'/'加上它 { fatherPath = '/' + fatherPath; } if (req_path!='/')//长度一定超过2了 { //如果最后一个字符是'/'去掉它 if('/'==fatherPath.charAt(fatherPath.length -1)) { fatherPath = fatherPath.substring(0,fatherPath.length - 2); } //从后向前查找'/',提取前面的串 fatherPath = fatherPath.substring(0,fatherPath.lastIndexOf('/')+1); } str += '</table><br/>' + '<a href=\"' + fatherPath +'\">' + '返回上一层' +'</a>'; res.writeHead(200, {'Content-Type' : 'text/html;charset=utf8'}); res.write(str); res.end(); } ); } } } ); }else { res.writeHead(404, {'Content-Type' : 'text/html;charset=utf8'}); res.end('<div styel="color:black;font-size:22px;">404 not found</div>'); } }); }); server.listen('9090'); //代码来自http://blog.csdn.net/fifaquake/article/details/7532145 作者fifaquake function DisplayServiceIP(){ var os=require('os'); var ifaces=os.networkInterfaces(); for (var dev in ifaces) { var alias=0; ifaces[dev].forEach(function(details){ if (details.family=='IPv4') { console.log(dev+(alias?':'+alias:''),details.address); ++alias; } }); } } DisplayServiceIP(); console.log('ing...port: 9090')
相关文章推荐
- Node.js用6行代码1个JS文件搭建一个HTTP静态服务器
- Node.js用6行代码1个JS文件搭建一个HTTP静态服务器
- Node.JS入门--通过构建一个上传文件的服务器来学习Node.JS
- 【深入浅出Node.js系列十】一个简单的静态文件合并服务器
- node.js 学习笔记一:创建一个服务器
- 如何设计一个基于Node.js和Express的网站架构?
- 利用js提交数据给服务器 可以很秘密的提交数据到服务器 运行会访问 一个gif文件
- Js和css文件动态合并------用Node.js开发的一个前端优化小程序
- 使用node.js做一个简单的服务器
- 检查远程服务器的js不可用时,动态加载本地服务器文件
- 使用Node.js实现一个简单的FastCGI服务器实例
- node.js入门【编一个小web服务器】
- 使用Node.js实现一个简单的FastCGI服务器实例
- 如何设计一个基于Node.js和Express的网站架构?
- 一个简单的基于node.js的TCP服务器和基于C++的TCP客户端通信示例程序
- 分享:Node.js静态文件服务器实战
- Node.js项目配置文件的设计
- 浅析Node.js:一个“编码就绪”服务器
- 基于Node.js的文件下载服务器
- 博文共赏:Node.js静态文件服务器实战