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

github

https://github.com/ymyang/fdfs

安装

npm install fdfs

使用

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

以上是一些基本配置,你还可以自定义你的日志输出工具,默认是使用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.  
    });
  14.  
     

上传文件

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

ReadableStream

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

其他一些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.  
     
  4.  
    }).catch(function(err) {
  5.  
    console.error(err);
  6.  
    );

下载到WritableStream

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

下载文件片段

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

删除文件

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

获取文件信息

  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.  
    // flag 'O' for overwrite all old metadata (default) 'M' for merge, insert when the meta item not exist, otherwise update it
  2.  
    fdfs.setMetaData(fileId, metaData, flag).then(function() {
  3.  
    // 设置成功
  4.  
     
  5.  
    }).catch(function(err) {
  6.  
    console.error(err);
  7.  
    );

获取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.  

最新文章

  1. java web后台开发SSM框架(Spring+SpringMVC+MyBaitis)搭建与优化
  2. 如何动态在spring mvc中增加bean
  3. javascript入门:this的规则与bind的各种风骚用法
  4. java读取properties配置文件总结
  5. 关于OnEraseBkgnd和OnPaint的转载
  6. 【转载】H264--1--编码原理以及I帧B帧P帧
  7. underscore.js框架使用
  8. 使用CXF开发JAX-RS类型的WebService
  9. RestFramework——API设计规范
  10. 【git】日志提交规范
  11. 浅谈Spring中的Quartz配置
  12. LeetCode题解之Maximum Depth of N-ary Tree
  13. oracle 禁用/启动job
  14. 查看80port是否被占用
  15. k8s常用指令集(kubectl kubeadm)
  16. Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等
  17. Maven——依赖
  18. Django:模板系统
  19. 如何定义 match 常量?
  20. WEB将本地项目添加到git

热门文章

  1. 洛谷P1706全排列问题
  2. SVN版本回滚实战
  3. 【洛谷】P3537 [POI2012]SZA-Cloakroom
  4. GO语言网络编程
  5. 第08组 Alpha冲刺(1/6)
  6. 范仁义web前端介绍课程---5、webstorm的下载安装
  7. Are query string keys case sensitive?
  8. Java查询目录下的所有文件(包括子目录)
  9. [java.lang.NoSuchMethodError: org.hibernate.Session.createQuery(Ljava/lang/String;)Lorg/hibernate/query/Query;]
  10. Django微信小程序后台开发教程