最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

NodeJs實現(xiàn)簡易WEB上傳下載服務(wù)器

 更新時間:2021年04月11日 14:43:58   作者:SumeriZhanYg  
這篇文章主要為大家詳細(xì)介紹了NodeJs實現(xiàn)一個簡易WEB上傳下載服務(wù)器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

項目上的需求是集群均可生成PDF文件或是訪問PDF文件,但是沒有文件服務(wù)器,故做一個簡易的文件服務(wù)器。

解決方案:集群內(nèi)的機(jī)器(客戶端)生成PDF文件之后將PDF文件推給文件服務(wù)器,我們暫且稱它為服務(wù)端;如果某個客戶端需要訪問到這個PDF文件,則去服務(wù)端獲?。ㄒ驗榭赡芷渌蛻舳艘呀?jīng)生成了該P(yáng)DF文件),如果沒有找到,則自己客戶端生成PDF文件,再將PDF文件推給服務(wù)端。

為了實施簡易,現(xiàn)采取NodeJs來實現(xiàn)一個小程序。 不多說,直接上代碼:

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);//對文件路徑字符串進(jìn)行操作
 
 var responseBody = {};
 mkdirsSync(pathObj.dir);//遞歸創(chuàng)建文件目錄
 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());
});
 
//遞歸創(chuàng)建文件目錄 同步方法
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即可觸發(fā)上傳過程

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程序,直接用此程序去壓測,得到結(jié)果是每秒可處理八十多個請求,基本上能滿足現(xiàn)在的需求,還有很多改進(jìn)的地方,比如加入緩存,隊列....等等。

對于NodeJs本人也只是學(xué)到了一點皮毛,還有很多知識點沒去探究。大家看看就行。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • node版本沖突問題的解決方案

    node版本沖突問題的解決方案

    因為項目用的依賴和要運行環(huán)境的node.js版本起了沖突,下面這篇文章主要給大家介紹了關(guān)于node版本沖突問題的解決方案,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Node.js內(nèi)置模塊events事件監(jiān)聽發(fā)射詳解

    Node.js內(nèi)置模塊events事件監(jiān)聽發(fā)射詳解

    這篇文章主要為大家介紹了Node.js內(nèi)置模塊events事件監(jiān)聽發(fā)射詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Node快速切換版本、版本回退(降級)、版本更新(升級)

    Node快速切換版本、版本回退(降級)、版本更新(升級)

    這篇文章主要介紹了Node快速切換版本、版本回退(降級)、版本更新(升級),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Node.js本地搭建簡單頁面小游戲的過程

    Node.js本地搭建簡單頁面小游戲的過程

    Node.js是能夠在服務(wù)器端運行 JavaScript 的開放源代碼、跨平臺運行環(huán)境,Node.js 大部分基本模塊都用 JavaScript 語言編寫,下面將介紹如何簡單幾步實現(xiàn)遠(yuǎn)程公共網(wǎng)絡(luò)下訪問windwos node.js的服務(wù)端
    2024-01-01
  • node.js express框架實現(xiàn)文件上傳與下載功能實例詳解

    node.js express框架實現(xiàn)文件上傳與下載功能實例詳解

    這篇文章主要介紹了node.js express框架實現(xiàn)文件上傳與下載功能,結(jié)合具體實例形式詳細(xì)分析了node.js express框架針對文件上傳與下載的前后臺相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2019-10-10
  • Node.js多進(jìn)程的方法與參數(shù)實例說明

    Node.js多進(jìn)程的方法與參數(shù)實例說明

    這篇文章主要介紹了Node.js多進(jìn)程的方法與參數(shù)實例說明,Node.js 是以單線程的模式運行的,但它使用的是事件驅(qū)動來處理并發(fā),這樣有助于我們在多核 cpu 的系統(tǒng)上創(chuàng)建多個子進(jìn)程,從而提高性能,需要的朋友可以參考下
    2023-05-05
  • 使用Node.js搭建靜態(tài)資源服務(wù)詳細(xì)教程

    使用Node.js搭建靜態(tài)資源服務(wù)詳細(xì)教程

    這篇文章主要介紹了使用Node.js搭建靜態(tài)資源服務(wù)器,需要的朋友可以參考下
    2017-08-08
  • websocket實現(xiàn)Vue?3和Node.js之間的實時消息推送

    websocket實現(xiàn)Vue?3和Node.js之間的實時消息推送

    使用?WebSocket?實現(xiàn)實時消息推送是一種高效的方式,可以在客戶端和服務(wù)器之間建立長連接,實現(xiàn)低延遲的雙向通信,以下是一個簡單的示例,展示如何在前端使用?Vue?3?和后端使用?Node.js?搭建一個?WebSocket?實現(xiàn)實時消息推送的應(yīng)用
    2024-06-06
  • Node.js實現(xiàn)簡單的爬取的示例代碼

    Node.js實現(xiàn)簡單的爬取的示例代碼

    這篇文章主要介紹了Node.js實現(xiàn)簡單的爬取的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • nodejs個人博客開發(fā)第六步 數(shù)據(jù)分頁

    nodejs個人博客開發(fā)第六步 數(shù)據(jù)分頁

    這篇文章主要為大家詳細(xì)介紹了nodejs個人博客開發(fā)的數(shù)據(jù)分頁,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04

最新評論

山丹县| 茌平县| 竹山县| 望都县| 上林县| 福泉市| 焉耆| 寿宁县| 卢龙县| 菏泽市| 衡山县| 五指山市| 林西县| 安庆市| 新丰县| 永平县| 天气| 阿拉善左旗| 河曲县| 平顺县| 康保县| 游戏| 金昌市| 潼南县| 神农架林区| 和田县| 垫江县| 五大连池市| 疏勒县| 双牌县| 安新县| 白玉县| 仙桃市| 栾城县| 沙坪坝区| 巴东县| 清苑县| 宜都市| 象山县| 乌鲁木齐县| 达州市|