Nodejs Client for FastDFS
2024-09-06 13:55:20
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 servers
trackers: [
{
host: 'tracker.fastdfs.com',
port: 22122
}
],
// 默认超时时间10s
timeout: 10000,
// 默认后缀
// 当获取不到文件后缀时使用
defaultExt: 'txt',
// charset默认utf8
charset: 'utf8'
});
以上是一些基本配置,你还可以自定义你的日志输出工具,默认是使用console 例如你要使用debug作为你的日志输出工具,你可以这么做:
var debug = require('debug')('fdfs');
var fdfs = new FdfsClient({
// tracker servers
trackers: [
{
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获取方式只为演示功能,实际不会这么去构建buffer
var buffer = fs.readFileSync('test.gif');
fdfs.upload(buffer).then(function(fileId) {
// fileId 为 group + '/' + filename
console.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 + '/' + filename
console.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);
最新文章
- java web后台开发SSM框架(Spring+SpringMVC+MyBaitis)搭建与优化
- 如何动态在spring mvc中增加bean
- javascript入门:this的规则与bind的各种风骚用法
- java读取properties配置文件总结
- 关于OnEraseBkgnd和OnPaint的转载
- 【转载】H264--1--编码原理以及I帧B帧P帧
- underscore.js框架使用
- 使用CXF开发JAX-RS类型的WebService
- RestFramework——API设计规范
- 【git】日志提交规范
- 浅谈Spring中的Quartz配置
- LeetCode题解之Maximum Depth of N-ary Tree
- oracle 禁用/启动job
- 查看80port是否被占用
- k8s常用指令集(kubectl kubeadm)
- Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等
- Maven——依赖
- Django:模板系统
- 如何定义 match 常量?
- WEB将本地项目添加到git
热门文章
- 洛谷P1706全排列问题
- SVN版本回滚实战
- 【洛谷】P3537 [POI2012]SZA-Cloakroom
- GO语言网络编程
- 第08组 Alpha冲刺(1/6)
- 范仁义web前端介绍课程---5、webstorm的下载安装
- Are query string keys case sensitive?
- Java查询目录下的所有文件(包括子目录)
- [java.lang.NoSuchMethodError: org.hibernate.Session.createQuery(Ljava/lang/String;)Lorg/hibernate/query/Query;]
- Django微信小程序后台开发教程