中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

NodeJs如何實現簡易WEB上傳下載服務器

發布時間:2021-04-19 13:56:11 來源:億速云 閱讀:145 作者:小新 欄目: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

沙雅县| 南投市| 天全县| 渑池县| 正安县| 青州市| 抚宁县| 聂荣县| 普陀区| 锦屏县| 翼城县| 陆河县| 曲阳县| 临沧市| 工布江达县| 南宫市| 罗源县| 桂阳县| 岳阳县| 楚雄市| 夹江县| 宁乡县| 宜宾市| 吉安市| 北安市| 邯郸县| 理塘县| 汉源县| 临安市| 伽师县| 荆州市| 包头市| 陇川县| 健康| 织金县| 三明市| 鄯善县| 河源市| 彭阳县| 定南县| 蕉岭县|