用Nodejs實現檔案伺服器 一

2021-07-25 12:48:56 字數 2112 閱讀 9427

這份伺服器**僅實現了乙個簡單的檔案伺服器,接收來自api伺服器的請求,儲存或傳送使用者的**。該伺服器沒有考慮當存在大量請求時的效能問題,本身對於專案來說亦功能不完善。這兩個問題將在後續中一一解決。

首先應用express模組與fs模組,這是處理url請求與檔案讀寫必不可少的一部分。如果對這兩個模組的使用不熟悉請自行查閱官方文件或一些教程。

var express = require('express');

var fs = require('fs');

該檔案伺服器邏輯如下,對於uri為/upload的post請求返回乙個上傳的id;對於uri為/upload/:upload_id的put請求接收上傳檔案並命名儲存;對於uri未/upload/:upload_id的get請求認為該id對應的上傳操作已完成,返回這個id對應的上傳檔案的檔名,該id失效;對於uri為/download/:filename的get請求返回對應的檔案。

對於id的合法性判斷,可以使用id為鍵建立陣列。此處id初始值為0,每生效乙個id就講id值加1。而對於id對應的檔名,以id為鍵存在另乙個陣列中。

var upload_ids = ;

var next_id = 0;

var file_names = ;

upload_ids[next_id] = true;

res.set("upload_id", (next_id++).tostring());

res.send();

});

if (upload_ids[req.params.upload_id] == true) );

} else res.send();

});結束上傳時,返回檔案的大小和檔名。此處暫時將兩個引數設定在response的報文中,其實應該生成乙個json檔案返回,將在後續處理。

接下來是檔案上傳部分,**如下。

if (upload_ids[parseint(req.params.upload_id)] == true)

res.send();

});**較短,邏輯方面沒啥好說的,檔案儲存在nodejs檔案的父目錄的upload目錄中。需要注意的是關於資料傳輸是使用了pipe和stream,而不是常見的

req.on("data", function(postdatachunk) );

var filepath = "./upload/"+req.params.filename;

fs.exists(filepath, function(exist) else

});});邏輯方面同樣沒啥好說的,就是注意使用管道流的方式傳送檔案。

最後,關於伺服器的啟動

console.log("listen at 8080");

});新增這些功能後,完整**如下

var express = require('express');

var fs = require('fs');

var upload_ids = ;

var next_id = 0;

var file_names = ;

upload_ids[next_id] = true;

res.set("upload_id", (next_id++).tostring());

res.send();

}); if (upload_ids[parseint(req.params.upload_id)] == true) ));

}res.send();

}); if (upload_ids[req.params.upload_id] == true) );

} else );

}} else res.send();

}); var filepath = "./upload/"+req.params.filename;

fs.exists(filepath, function(exist) else else ).pipe(res);}}

});}); console.log("listen at 8080");

});

這個坑,待我日後有空再填。。。。。。

nodejs入門 靜態檔案伺服器

本文展示是基於node.js的靜態檔案伺服器,參考自這裡,主要是練習node http 檔案模組的使用,另外,對理解http協議也很有幫助 除了實現了基本的路由控制,還實現了mime型別 304快取 gzip壓縮 目錄讀取 首先是配置檔案,setting.js var setting compres...

FastDFS Nginx實現檔案伺服器

a b 啟動tracker etc init.d fdfs trackerd start 啟動storage etc init.d fdfs storaged start cd home fastdfs ll nginx configure prefix usr local nginx add mo...

golang 檔案伺服器 實現

示例如下 原始碼解釋 os.args 0 獲取的是執行程式時的第乙個引數,預設第乙個引數是程式所在的目錄 filepath.abs filepath.dir os.args 0 是獲取當前可執行程式所在的絕對路徑 http.handle http.fileserver http.dir p 是開啟乙...