温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

NodeJs如何实现简易WEB上传下载服务器

发布时间:2021-04-19 13:56:11 来源:亿速云 阅读:159 作者:小新 栏目:web开发

这篇文章主要介绍NodeJs如何实现简易WEB上传下载服务器,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

项目上的需求是集群均可生成PDF文件或是访问PDF文件,但是没有文件服务器,故做一个简易的文件服务器。

解决方案:集群内的机器(客户端)生成PDF文件之后将PDF文件推给文件服务器,我们暂且称它为服务端;如果某个客户端需要访问到这个PDF文件,则去服务端获取(因为可能其他客户端已经生成了该PDF文件),如果没有找到,则自己客户端生成PDF文件,再将PDF文件推给服务端。

为了实施简易,现采取NodeJs来实现一个小程序。 不多说,直接上代码:

server.js

var express = require('express'); var url = require('url'); var fs = require('fs'); var http = require('http'); var queryString = require('querystring'); var bodyParser = require('body-parser'); var path=require('path');    var app = express();   app.use(bodyParser.json({limit:'1000kb'})); app.use(bodyParser.urlencoded({limit:'1000kb',extended:true}));   var count=0;   app.post('/upload.node',function(req,resp){  console.log('上传请求 '+ (new Date()));  var data = new Buffer(req.body.fileData,'base64');  var filePath = req.body.filePath;  var pathObj = path.parse(filePath);//对文件路径字符串进行操作    var responseBody = {};  mkdirsSync(pathObj.dir);//递归创建文件目录  try{  var writerStream = fs.createWriteStream(filePath);  writerStream.write(data);   writerStream.end();    writerStream.on('finish', function() {   console.log('上传完成 '+ (new Date()));  });  writerStream.on('error', function(err){   console.log(err.stack);  });  responseBody=JSON.stringify({   returnMsg:'200'  });  }catch(err){  console.log('上传出错 '+ (new Date()));  responseBody=JSON.stringify({   returnMsg:'400'  });  }  //写入文件    //console.log('*** ' + count +' ***');   resp.status(200).end(responseBody.toString()); });   app.post('/download.node',function(req,resp){  console.log('下载请求 '+ (new Date()));  var filePath = req.body.filePath;  console.log('download');  var responseBody = {};  if(fs.existsSync(filePath)){  var data = fs.readFileSync(filePath);  var dataBase64 = data.toString('base64');  responseBody = JSON.stringify({   returnMsg:'200',   filePath:filePath,   fileData:dataBase64  });  console.log('下载完成 '+ (new Date()));  }else{  responseBody=JSON.stringify({   returnMsg:'400'  });  console.log('文件未找到 '+ (new Date()));  }  //console.log('*** ' + ++count +' ***');  resp.status(200).end(responseBody.toString()); });   //递归创建文件目录 同步方法 function mkdirsSync(filePath){  if(fs.existsSync(filePath)){  return true;  }else{  if(mkdirsSync(path.dirname(filePath))){   fs.mkdirSync(filePath);   return true;  }  } }     var server = app.listen(20001,function(){    console.log('Server started.'); })

提供一个测试js代码..  浏览器通过get请求 http://127.0.0.1:20000/upload.do?filePath=XXXX即可触发上传过程

var express = require('express'); var url = require('url'); var fs = require('fs'); var http = require('http'); var queryString = require('querystring'); var bodyParser = require('body-parser');   var app = express();   app.use(bodyParser.json({limit:'1000kb'})); app.use(bodyParser.urlencoded({limit:'1000kb',extended:true}));   var count=0;   app.get('/upload.do',function(req,resp){  console.log('upload.do');  //var path = url.parse(req.url).pathname;  //console.log('Request for ' + path);  var filePath = req.query.filePath;  //var fileData = req.query.fileData;  var address = req.query.address;    upload(filePath,'127.0.0.1',20001);  console.log('*** ' + ++count +' ***');  var response = {     "first":req.query.filePath,     "last":req.query.address   };   resp.end(JSON.stringify(response)); });   function upload(filePath,address,port){    var Data = readFile(filePath);  var dataBase64 = Data.toString('base64');  console.log(Data);  console.log(dataBase64);  //var DataJSON = JSON.stringify(Data);    //fs.writeFile('D:/input.txt',dataBase64,function(err){  // if(err){  // console.err(err);  // }  //});  var JsonData = queryString.stringify({  filePath:filePath,  fileData:dataBase64  });  //console.log(JsonData);  var options = {  method: "POST",  host : address,  port : port,  path : '/upload.node',  headers: {   'Content-Type':'application/x-www-form-urlencoded'  }  };    var req = http.request(options, function(res){   res.setEncoding('utf8');  });  req.write(JsonData);  req.end(); }   function readFile(filePath){  var fileData = '';  try{  fileData = fs.readFileSync(filePath);  }catch(e){  fileData = '';  }  return fileData; }   app.post('/download.do',function(req,resp){  //可直接参考server.js的代码 })   var server = app.listen(20000,function(){    console.log('Server started.'); })

这仅仅是一个简易的Nodejs程序,直接用此程序去压测,得到结果是每秒可处理八十多个请求,基本上能满足现在的需求,还有很多改进的地方,比如加入缓存,队列....等等。

对于NodeJs本人也只是学到了一点皮毛,还有很多知识点没去探究。大家看看就行。

以上是“NodeJs如何实现简易WEB上传下载服务器”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI