- Notifications
You must be signed in to change notification settings - Fork21
ymyang/fdfs
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
FastDFS 是分布式文件存储系统。这个项目是FastDFS的NodeJS客户端,用来与FastDFS Server进行交互,进行文件的相关操作。我测试过的server版本是4.0.6。
npm install fdfs
varFdfsClient=require('fdfs');varfdfs=newFdfsClient({// tracker serverstrackers:[{host:'tracker.fastdfs.com',port:22122}],// 默认超时时间10stimeout:10000,// 默认后缀// 当获取不到文件后缀时使用defaultExt:'txt',// charset默认utf8charset:'utf8'});
以上是一些基本配置,你还可以自定义你的日志输出工具,默认是使用console例如你要使用debug作为你的日志输出工具,你可以这么做:
vardebug=require('debug')('fdfs');varfdfs=newFdfsClient({// tracker serverstrackers:[{host:'tracker.fastdfs.com',port:22122}],logger:{log:debug}});
注:以下fileId为group + '/' + filename,以下的所有操作使用的fileId都是一样
通过本地文件名上传
fdfs.upload('e:/shou.jpg').then(function(fileId){// fileId 为 group + '/' + filenameconsole.log(fileId);}).catch(function(err){console.error(err););
上传Buffer
varfs=require('fs');// 注意此处的buffer获取方式只为演示功能,实际不会这么去构建buffervarbuffer=fs.readFileSync('test.gif');fdfs.upload(buffer).then(function(fileId){// fileId 为 group + '/' + filenameconsole.log(fileId);}).catch(function(err){console.error(err););
ReadableStream
varfs=require('fs');varrs=fs.createReadStream('test.gif');fdfs.upload(rs).then(function(fileId){// fileId 为 group + '/' + filenameconsole.log(fileId);}).catch(function(err){console.error(err););
其他一些options,作为第2个参数传入
fdfs.upload('test.gif',{// 上传方法 [upload, uploadAppender, append, modify], 默认为uploadmethod:'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 + '/' + filenameconsole.log(fileId);}).catch(function(err){console.error(err););
下载到本地
fdfs.download(fileId,'test_download.gif').then(function(){// 下载完成}).catch(function(err){console.error(err););
下载到WritableStream
varfs=require('fs');varws=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, 我只贴出来文件签名信息吧,flag字段如果不传则默认是O
/** *@param fileId *@param metaData {key1: value1, key2: value2} *@param 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););
fdfs.listGroups().then(function(groups){console.log(groups);}).catch(function(err){console.error(err););
fdfs.listStorages(‘group1’).then(function(storages){console.log(storages);}).catch(function(err){console.error(err););