這份伺服器**僅實現了乙個簡單的檔案伺服器,接收來自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 = ;if (upload_ids[req.params.upload_id] == true) );var next_id = 0;
var file_names = ;
upload_ids[next_id] = true;
res.set("upload_id", (next_id++).tostring());
res.send();
});
} 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 是開啟乙...