项目作者: ymyang

项目描述 :
FastDFS nodejs client
高级语言: JavaScript
项目地址: git://github.com/ymyang/fdfs.git
创建时间: 2015-08-24T13:11:25Z
项目社区:https://github.com/ymyang/fdfs

开源协议:

下载


Nodejs Client for FastDFS

FastDFS 是分布式文件存储系统。这个项目是FastDFS的NodeJS客户端,用来与FastDFS Server进行交互,进行文件的相关操作。我测试过的server版本是4.0.6。

安装

  1. npm install fdfs

使用

  1. var FdfsClient = require('fdfs');
  2. var fdfs = new FdfsClient({
  3. // tracker servers
  4. trackers: [
  5. {
  6. host: 'tracker.fastdfs.com',
  7. port: 22122
  8. }
  9. ],
  10. // 默认超时时间10s
  11. timeout: 10000,
  12. // 默认后缀
  13. // 当获取不到文件后缀时使用
  14. defaultExt: 'txt',
  15. // charset默认utf8
  16. charset: 'utf8'
  17. });

以上是一些基本配置,你还可以自定义你的日志输出工具,默认是使用console
例如你要使用debug作为你的日志输出工具,你可以这么做:

  1. var debug = require('debug')('fdfs');
  2. var fdfs = new FdfsClient({
  3. // tracker servers
  4. trackers: [
  5. {
  6. host: 'tracker.fastdfs.com',
  7. port: 22122
  8. }
  9. ],
  10. logger: {
  11. log: debug
  12. }
  13. });

上传文件

注:以下fileId为group + ‘/‘ + filename,以下的所有操作使用的fileId都是一样

通过本地文件名上传

  1. fdfs.upload('e:/shou.jpg').then(function(fileId) {
  2. // fileId 为 group + '/' + filename
  3. console.log(fileId);
  4. }).catch(function(err) {
  5. console.error(err);
  6. );

上传Buffer

  1. var fs = require('fs');
  2. // 注意此处的buffer获取方式只为演示功能,实际不会这么去构建buffer
  3. var buffer = fs.readFileSync('test.gif');
  4. fdfs.upload(buffer).then(function(fileId) {
  5. // fileId 为 group + '/' + filename
  6. console.log(fileId);
  7. }).catch(function(err) {
  8. console.error(err);
  9. );

ReadableStream

  1. var fs = require('fs');
  2. var rs = fs.createReadStream('test.gif');
  3. fdfs.upload(rs).then(function(fileId) {
  4. // fileId 为 group + '/' + filename
  5. console.log(fileId);
  6. }).catch(function(err) {
  7. console.error(err);
  8. );

其他一些options,作为第2个参数传入

  1. fdfs.upload('test.gif', {
  2. // 上传方法 [upload, uploadAppender, append, modify], 默认为upload
  3. method: 'upload',
  4. // 指定文件存储的group,不指定则由tracker server分配
  5. group: 'group1',
  6. // method为append或modify指定追加的源文件
  7. fileId: 'group1/M00/00/0F/wKgBeFXlZJuAdsBZAAPm5H9JxDA153.jpg',
  8. // file bytes, file参数为ReadableStream时必须指定
  9. size: 1024,
  10. // method为modify指定追加的源文件的起始点
  11. offset: 10240,
  12. // 上传文件的后缀,不指定则获取file参数的后缀,不含(.)
  13. ext: 'jpg'
  14. }).then(function(fileId) {
  15. // fileId 为 group + '/' + filename
  16. console.log(fileId);
  17. }).catch(function(err) {
  18. console.error(err);
  19. );

下载文件

下载到本地

  1. fdfs.download(fileId, 'test_download.gif').then(function() {
  2. // 下载完成
  3. }).catch(function(err) {
  4. console.error(err);
  5. );

下载到WritableStream

  1. var fs = require('fs');
  2. var ws = fs.createWritableStream('test_download.gif');
  3. fdfs.download(fileId, ws).then(function() {
  4. // 下载完成
  5. }).catch(function(err) {
  6. console.error(err);
  7. );

下载文件片段

  1. fdfs.download(fileId, {
  2. target: 'test_download.part',
  3. offset: 5,
  4. bytes: 5
  5. }).then(function() {
  6. // 下载完成
  7. }).catch(function(err) {
  8. console.error(err);
  9. );

删除文件

  1. fdfs.del(fileId).then(function() {
  2. // 删除成功
  3. }).catch(function(err) {
  4. console.error(err);
  5. );

获取文件信息

  1. fdfs.getFileInfo(fileId).then(function(fileInfo) {
  2. // fileInfo有4个属性
  3. // {
  4. // // 文件大小
  5. // size:
  6. // // 文件创建的时间戳,单位为秒
  7. // timestamp:
  8. // // 校验和
  9. // crc32:
  10. // // 最初上传到的storage server的ip
  11. // addr:
  12. // }
  13. console.log(fileInfo);
  14. }).catch(function(err) {
  15. console.error(err);
  16. );

文件的Meta Data

设置Meta Data, 我只贴出来文件签名信息吧,flag字段如果不传则默认是O

  1. /**
  2. * @param fileId
  3. * @param metaData {key1: value1, key2: value2}
  4. * @param flag 'O' for overwrite all old metadata (default)
  5. 'M' for merge, insert when the meta item not exist, otherwise update it
  6. */
  7. fdfs.setMetaData(fileId, metaData, flag).then(function() {
  8. // 设置成功
  9. }).catch(function(err) {
  10. console.error(err);
  11. );

获取Meta Data

  1. fdfs.getMetaData(fileId).then(function(metaData) {
  2. console.log(metaData);
  3. }).catch(function(err) {
  4. console.error(err);
  5. );

group信息

  1. fdfs.listGroups().then(function(groups) {
  2. console.log(groups);
  3. }).catch(function(err) {
  4. console.error(err);
  5. );

storage信息

  1. fdfs.listStorages(‘group1’).then(function(storages) {
  2. console.log(storages);
  3. }).catch(function(err) {
  4. console.error(err);
  5. );