Nodejs Client for FastDFS
FastDFS 是分布式文件存储系统。这个项目是FastDFS的NodeJS客户端,用来与FastDFS Server进行交互,进行文件的相关操作。我测试过的server版本是4.0.6。
github
https://github.com/ymyang/fdfs
安装
npm install fdfs
使用
var fdfs = require('fdfs');var fdfs = new FdfsClient({// tracker serverstrackers: [{host: 'tracker.fastdfs.com',port: 22122}],// 默认超时时间10stimeout: 10000,// 默认后缀// 当获取不到文件后缀时使用defaultExt: 'txt',// charset默认utf8charset: 'utf8'});
以上是一些基本配置,你还可以自定义你的日志输出工具,默认是使用console 例如你要使用debug作为你的日志输出工具,你可以这么做:
var debug = require('debug')('fdfs');var fdfs = new FdfsClient({// 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 + '/' + filename
- console.log(fileId);
- }).catch(function(err) {
- console.error(err);
- );
上传Buffer
var fs = require('fs');// 注意此处的buffer获取方式只为演示功能,实际不会这么去构建buffervar buffer = fs.readFileSync('test.gif');fdfs.upload(buffer).then(function(fileId) {// fileId 为 group + '/' + filenameconsole.log(fileId);}).catch(function(err) {console.error(err););
ReadableStream
var fs = require('fs');var rs = 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], 默认为upload
- method: '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 + '/' + filename
- console.log(fileId);
- }).catch(function(err) {
- console.error(err);
- );
下载文件
下载到本地
- fdfs.download(fileId, 'test_download.gif').then(function() {
- // 下载完成
- }).catch(function(err) {
- console.error(err);
- );
下载到WritableStream
var fs = require('fs');var ws = 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
设置Meta Data
flag字段如果不传则默认是O
- // 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);
- );
group信息
- fdfs.listGroups().then(function(groups) {
- console.log(groups);
- }).catch(function(err) {
- console.error(err);
- );
storage信息
- fdfs.listStorages(‘group1’).then(function(storages) {
- console.log(storages);
- }).catch(function(err) {
- console.error(err);
Nodejs Client for FastDFS的更多相关文章
- C# Socket TCP Server & Client & nodejs client
要调试公司某项目里的一个功能,因为要准备测试环境,趁这个机会重温了一下Socket(全还给老师了 -_-#),做个备份. C# Server static void Main(string[] arg ...
- 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 ...
- presto-gateway nodejs client
目前已经有了好几个presto nodejs 的client,为了方便presto-gateway 的连接,修改了一个现有的nodejs client 可以方便的连接presto-gateway 原理 ...
- NodeJS client code websocket
var WebSocketClient = require('websocket').client; var client = new WebSocketClient(); client.on('co ...
- FastDFS.Client操作文件服务器
1.配置文件设置 <configSections> <section name="fastdfs" type="FastDFS.Client.Confi ...
- Nodejs学习笔记(九)--- 与Redis的交互(mranney/node_redis)入门
目录 简介和安装 redis简介 redis安装 redis运行 node_redis安装 连接到redis服务器redis.createClient() 认证 client.auth(passwor ...
- FastDFS安装配置
FastDFS FastDFS为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传.下载等服务 ...
- Gearman + Nodejs + MySQL UDF异步实现 MySQL 到 Redis 的数据同步
[TOC] 1, 环境 CentOS, MySQL, Redis, Nodejs 2, Redis简介 Redis是一个开源的K-V内存数据库,它的key可以是string/set/hash/list ...
- FastDFS概要
本篇文章是我上级老大所写. 留在这里为了不弄丢. FastDFS是一款开源的轻量级分布式文件系统 纯C实现,支持Linux, FreeBSD等UNIX系统 类google FS, 不是通用的文件系统, ...
随机推荐
- nginx反向代理 报错:Error during WebSocket handshake: Unexpected response code: 403
遇到nginx报错:websocket wss failed: Error during WebSocket handshake: Unexpected response code: 403 serv ...
- Nginx 安装配置【必须把文件到放到机器上】
[必须把所有下载的gz文件到放到机器上:编译] 1.安装nginx之前的编译软件 yum -y install make zlib zlib-devel gcc-c++ libtool openss ...
- linux的计划任务操作
1.cron服务来设置 计划任务查看与设置命令:crontab 包括条目: 分钟m:0-59 小时h:0-23 月日dom:1-31 月份mon:1-12 星期dow:0-7 例子: 每隔2小时处理一 ...
- Open Judge 1.4 09
09:判断能否被3,5,7整除 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个整数,判断它能否被3,5,7整除,并输出以下信息:1.能同时被3,5,7整除(直接输出3 5 ...
- 9.11 myl模拟赛
9.11 myl 模拟赛 100 + 100 + 0 第一题耗费了太多的时间,导致最后一题没有时间想,直接去写了暴力,而且出题人没有给暴力分.... Problem 1. superman [题目描述 ...
- 【一起来烧脑】一步学会Vue.js系统
Vuejs是一个构建数据驱动的web界面的库,通过api实现响应的数据绑定和组合的视图组件,Vue.js的核心是一个响应的数据绑定系统,它让数据与DOM保持同步非常简单,一旦创建了绑定,DOM 将与数 ...
- shell脚本编程之变量简介及脚本执行过程
脚本变量简介 变量类型:字符型.数值型.真.假:事先确定数据的存放格式和长度: 变量存放在内存空间: 编译型语言,没有额外的处理逻辑,属于强类型语言: 脚本型语言,可以有解释器控制:所以,可以是弱类型 ...
- php-fpm 参数调优
php-fpm 进程池优化方法 php-fpm进程池开启进程有两种方式,一种是static,直接开启指定数量的php-fpm进程,不再增加或者减少:另一种则是dynamic,开始时开启一定数量的php ...
- DevOps-如何构建持续交付流水线
引言 DevOps 是一套实践方法,在保证高质量的前提下缩短系统变更从提交到部署至生产环境的时间,其中持续集成和持续交付是 DevOps 里面非常重要的一环.本文讲述了达到自动化持续交付需要做的准备工 ...
- Educational Codeforces Round 67 (Rated for Div. 2)
A 考虑之前选中没有一个的,那么结果就是\(min(n-s,n-t)\) 那么能选中的第一次就是这个结果\(+1\),但需要拥有两个 \((s>t)\)考虑一开始选不中\(t\),则但选中\(t ...