FastDFS 是分布式文件存儲系統。這個項目是FastDFS的NodeJS客戶端,用來與FastDFS Server進行交互,進行文件的相關操作。我測試過的server版本是4.0.6。
github
https://github.com/ymyang/fdfs
安裝
npm install fdfs
使用
-
var fdfs = require('fdfs');
-
-
var fdfs = new FdfsClient({
-
// tracker servers
-
trackers: [
-
{
-
host: 'tracker.fastdfs.com',
-
port: 22122
-
}
-
],
-
// 默認超時時間10s
-
timeout: 10000,
-
// 默認后綴
-
// 當獲取不到文件后綴時使用
-
defaultExt: 'txt',
-
// charset默認utf8
-
charset: 'utf8'
-
});
-
以上是一些基本配置,你還可以自定義你的日志輸出工具,默認是使用console 例如你要使用debug作為你的日志輸出工具,你可以這么做:
-
var debug = require('debug')('fdfs');
-
var fdfs = new FdfsClient({
-
// tracker servers
-
trackers: [
-
{
-
host: 'tracker.fastdfs.com',
-
port: 22122
-
}
-
],
-
logger: {
-
log: debug
-
}
-
});
-
上傳文件
注:以下fileId為group + '/' + filename,以下的所有操作使用的fileId都是一樣
通過本地文件名上傳
-
fdfs.upload( 'e:/shou.jpg').then(function(fileId) {
-
// fileId 為 group + '/' + filename
-
console.log(fileId);
-
}). catch(function(err) {
-
console.error(err);
-
);
上傳Buffer
-
var fs = require('fs');
-
-
// 注意此處的buffer獲取方式只為演示功能,實際不會這么去構建buffer
-
var buffer = fs.readFileSync('test.gif');
-
fdfs.upload(buffer).then(function(fileId) {
-
// fileId 為 group + '/' + filename
-
console.log(fileId);
-
}).catch(function(err) {
-
console.error(err);
-
);
-
ReadableStream
-
var fs = require('fs');
-
-
var rs = fs.createReadStream('test.gif');
-
fdfs.upload(rs).then(function(fileId) {
-
// fileId 為 group + '/' + filename
-
console.log(fileId);
-
}).catch(function(err) {
-
console.error(err);
-
);
-
其他一些options,作為第2個參數傳入
-
fdfs.upload( 'test.gif', {
-
// 上傳方法 [upload, uploadAppender, append, modify], 默認為upload
-
method: 'upload',
-
// 指定文件存儲的group,不指定則由tracker server分配
-
group: 'group1',
-
// method為append或modify指定追加的源文件
-
fileId: 'group1/M00/00/0F/wKgBeFXlZJuAdsBZAAPm5H9JxDA153.jpg',
-
// file bytes, file參數為ReadableStream時必須指定
-
size: 1024,
-
// method為modify指定追加的源文件的起始點
-
offset: 10240,
-
// 上傳文件的后綴,不指定則獲取file參數的后綴,不含(.)
-
ext: 'jpg'
-
}). then(function(fileId) {
-
// fileId 為 group + '/' + filename
-
console.log(fileId);
-
}). catch(function(err) {
-
console.error(err);
-
);
下載文件
下載到本地
-
fdfs.download(fileId, 'test_download.gif').then(function() {
-
// 下載完成
-
-
}). catch(function(err) {
-
console.error(err);
-
);
下載到WritableStream
-
var fs = require('fs');
-
var ws = fs.createWritableStream('test_download.gif');
-
fdfs.download(fileId, ws).then(function() {
-
// 下載完成
-
-
}).catch(function(err) {
-
console.error(err);
-
);
-
下載文件片段
-
fdfs.download(fileId, {
-
target: 'test_download.part',
-
offset: 5,
-
bytes: 5
-
}). then(function() {
-
// 下載完成
-
-
}). catch(function(err) {
-
console.error(err);
-
);
刪除文件
-
fdfs.del(fileId). then(function() {
-
// 刪除成功
-
-
}). catch(function(err) {
-
console.error(err);
-
);
獲取文件信息
-
fdfs.getFileInfo(fileId). then(function(fileInfo) {
-
// fileInfo有4個屬性
-
// {
-
// // 文件大小
-
// size:
-
// // 文件創建的時間戳,單位為秒
-
// timestamp:
-
// // 校驗和
-
// crc32:
-
// // 最初上傳到的storage server的ip
-
// addr:
-
// }
-
console.log(fileInfo);
-
}). catch(function(err) {
-
console.error(err);
-
);
文件的Meta Data
設置Meta Data
flag字段如果不傳則默認是O
-
// flag 'O' for overwrite all old metadata (default) 'M' for merge, insert when the meta item not exist, otherwise update it
-
fdfs.setMetaData(fileId, metaData, flag). then(function() {
-
// 設置成功
-
-
}). catch(function(err) {
-
console.error(err);
-
);
獲取Meta Data
-
fdfs.getMetaData(fileId). then(function(metaData) {
-
console.log(metaData);
-
}). catch(function(err) {
-
console.error(err);
-
);
group信息
-
fdfs.listGroups(). then(function(groups) {
-
console.log(groups);
-
}). catch(function(err) {
-
console.error(err);
-
);
storage信息
-
fdfs.listStorages(‘group1’). then(function(storages) {
-
console.log(storages);
-
}). catch(function(err) {
-
console.error(err);
-