• Nodejs Client for FastDFS


    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.  
  • 相关阅读:
    《掌握需求过程》读书笔记3
    《掌握需求过程》读书笔记2
    《掌握需求过程》阅读笔记1
    2017年秋季个人阅读计划 ---《掌握需求过程》第二版 pdf
    问题账户需求分析
    2017年秋季个人阅读计划
    《我们应当怎样做需求分析》阅读笔记
    软件工程概论课个人总结
    第二次冲刺-个人工作总结10
    第二次冲刺-个人工作总结09
  • 原文地址:https://www.cnblogs.com/zzsdream/p/11190072.html
Copyright © 2020-2023  润新知