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.  

Nodejs Client for FastDFS的更多相关文章

  1. C# Socket TCP Server & Client & nodejs client

    要调试公司某项目里的一个功能,因为要准备测试环境,趁这个机会重温了一下Socket(全还给老师了 -_-#),做个备份. C# Server static void Main(string[] arg ...

  2. What's New In Zeebe: Scaling Zeebe, New Client APIs, Faster Requests, Timestamps, NodeJS Client, and Default Topic is Back!

    Written by Daniel Meyer on May 16 2018 in the What's New In Zeebe category. Welcome to the first-eve ...

  3. presto-gateway nodejs client

    目前已经有了好几个presto nodejs 的client,为了方便presto-gateway 的连接,修改了一个现有的nodejs client 可以方便的连接presto-gateway 原理 ...

  4. NodeJS client code websocket

    var WebSocketClient = require('websocket').client; var client = new WebSocketClient(); client.on('co ...

  5. FastDFS.Client操作文件服务器

    1.配置文件设置 <configSections> <section name="fastdfs" type="FastDFS.Client.Confi ...

  6. Nodejs学习笔记(九)--- 与Redis的交互(mranney/node_redis)入门

    目录 简介和安装 redis简介 redis安装 redis运行 node_redis安装 连接到redis服务器redis.createClient() 认证 client.auth(passwor ...

  7. FastDFS安装配置

    FastDFS FastDFS为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传.下载等服务 ...

  8. Gearman + Nodejs + MySQL UDF异步实现 MySQL 到 Redis 的数据同步

    [TOC] 1, 环境 CentOS, MySQL, Redis, Nodejs 2, Redis简介 Redis是一个开源的K-V内存数据库,它的key可以是string/set/hash/list ...

  9. FastDFS概要

    本篇文章是我上级老大所写. 留在这里为了不弄丢. FastDFS是一款开源的轻量级分布式文件系统 纯C实现,支持Linux, FreeBSD等UNIX系统 类google FS, 不是通用的文件系统, ...

随机推荐

  1. django 第三天 视图

    今日内容 一.url路由分发之include 项目文件夹下的urls.py文件中的url写法: from django.conf.urls import url,include from django ...

  2. learning java identityHashCode

    var S1 = new String("aaaaa"); System.out.println("SI hasCode: " + S1.hashCode()) ...

  3. noi.ac #38 线段树+时间复杂度分析

    \(des\) 存在参数数组 \(a\),\(a\) 升序排列 \[a_1 < a_2 < \cdots < a_m, m <= 10\] 存在长度为 \(n\) 价值数组 \ ...

  4. Pytorch在colab和kaggle中使用TensorBoard/TensorboardX可视化

    在colab和kaggle内核的Jupyter notebook中如何可视化深度学习模型的参数对于我们分析模型具有很大的意义,相比tensorflow, pytorch缺乏一些的可视化生态包,但是幸好 ...

  5. socket.error: [Errno 9] Bad file descriptor

    这个错误很明显 ,是因为你关闭了套接字对象后,又再次去调用了套接字对象,此时套接字链接已经被关闭,你不能再去调用,所以才会出现这种错误,复查一下自己的代码,很快就可以解决. 参考: https://b ...

  6. js 中数组对象的定义赋值 以及方法

    1.定义数组 var m=new Array(); var n=[]; 2.数组的赋值(两种) A. var m=new Array(2); 一个值表示数组length var m=new Array ...

  7. 对okhttp参数的一些思考

    背景 项目中使用OkHttp访问三方服务 参数 创建okhttp客户端类的时候需要设置一些参数,有些可能是坑,仅供参考: client = new OkHttpClient.Builder() .di ...

  8. Kestrel: System.Exception: Error -4092 EACCES permission denied

    字面理解:  权限问题.. 这种情况往往是因为运行的端口被占用.. 可能是iis上有些站点使用了这个端口.. 也可能是其他原因.. 但大部分是端口问题..

  9. redis渐进式 rehash

    转载(http://redisbook.com/preview/dict/incremental_rehashing.html) 上一节说过, 扩展或收缩哈希表需要将 ht[0] 里面的所有键值对 r ...

  10. redis rehash

    rehash 随着操作的不断执行, 哈希表保存的键值对会逐渐地增多或者减少, 为了让哈希表的负载因子(load factor)维持在一个合理的范围之内, 当哈希表保存的键值对数量太多或者太少时, 程序 ...