go-fastdfs是一个基于http协议的开源的分布式文件系统,它基于大道至简的设计理念,一切从简设计,使得它的运维及扩展变得更加简单,它具有高性能、高可靠、无中心、免维护等优点。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。
项目地址:https://github.com/happyfish100/fastdfs
项目地址:https://github.com/sjqzhang/go-fastdfs
编译版本下载地址:https://github.com/sjqzhang/go-fastdfs/releases
1.文档介绍
中文Wiki地址:https://github.com/sjqzhang/go-fastdfs/blob/master/README-en.md
go-fastdfs是一个基于http协议的分布式文件系统,它基于大道至简的设计理念,一切从简设计,使得它的运维及扩展变得更加简单,它具有高性能、高可靠、无中心、免维护等优点。
支持curl命令上传
支持浏览器上传
支持HTTP下载
支持多机自动同步
支持断点下载
支持小文件自动合并(减少inode占用
支持配置自动生成
支持自监控告警
支持集群文件信息查看
使用通用HTTP协议
无需专用客户端(支持wget,curl等工具)
类fastdfs
高性能 (使用leveldb作为kv库)
高可靠(设计极其简单,使用成熟组件)
无中心设计(所有节点都可以同时读写)
优点
无依赖(单一文件)
自动同步
失败自动修复
按天分目录方便维护
支持不同的场景
文件自动去重
支持目录自定义
支持保留原文件名
支持自动生成唯一文件名
支持浏览器上传
支持查看集群文件信息
支持集群监控邮件告警
支持token下载 token=md5(file_md5+timestamp)
运维简单,只有一个角色(不像fastdfs有三个角色Tracker Server,Storage Server,Client),配置自动生成
每个节点对等(简化运维)
所有节点都可以同时读写
部署图
2.安装
1.首先下载官网的编译版本
2.运行可执行文件fileserver,然后 就会生成各种需要的配置文件.
3.配置
运行后生成的目录结构
conf文件夹:里面cfg.json是主要的配置文件,里面配置端口号、集群、外网访问url等。
需要注意的是配置文件中peers参数会自动生成一个本地主机ip,但还是需要配置增加一个内网ip.
不然使用api时会报以下信息:
Can only be called by the cluster ip or 127.0.0.1 or admin_ips(cfg.json),current ip:192.168.88.1
files文件夹:是图片上传以后保存的路径,默认是按日期划分,也可以指定路径。
log文件夹:是上传信息和运行的日志信息。
static文件夹:是放置一些前端静态页面xml文件。
data文件夹:里面是一些上传的后的图片信息记录保存在ldb格式文件,如文件的md5值,上传后的路径,时间戳,Szie大小等.
配置完cfg.json后直接运行可执行文件fileserver,运行成功后会显示如下内容:
Listen on:8080
运行成功后可按以下三种上传方式进行测试:
命令上传
curl -F file=@http-index-fs http://10.1.xx.60:8080/upload
WEB上传(浏览器打开)
http://yourserver ip:8080/upload.html 注意:不要使用127.0.0.1上传
代码上传(选项参阅浏览器上传)
golang版本
package main
import (
"fmt"
"github.com/astaxie/beego/httplib"
)
func main() {
var obj interface{}
req:=httplib.Post("http://10.1.5.9:8080/upload")
req.PostFile("file","filename")//注意不是全路径
req.Param("output","json")
req.Param("scene","")
req.Param("path","")
req.ToJSON(&obj)
fmt.Print(obj)
}
上传成功后会返回以下信息:
{
"url":"http://192.168.88.132:8080/group1/test/企业微信截图_15616176241551.png",
"md5":"baa10e8600a47f2aa0f8c2c926cfe409",
"path":"/group1/test/企业微信截图_15616176241551.png",
"domain":"http://192.168.88.132:8080",
"scene":"default",
"size":79491,
"mtime":1561619383,
"scenes":"default",
"retmsg":"",
"retcode":0,
"src":"/group1/test/企业微信截图_15616176241551.png"
}
一、统一使用POST请求
二、返回格式统一为json
格式如下
{
"status":"ok",
"message":"",
"data":{}
}
二、url中的group只有在support_group_manage设置为true才有。
例如:
http://10.1.5.9:8080/group/reload
默认:
http://10.1.5.9:8080/reload
说明:url中的group为cfg.json中的group参数值。
1.配置管理API
http://192.168.88.132:8080/reload?action=set&cfg=addr
参数:
参数名 | 类型 | 描述 |
action | string | set修改参数,get获取参数 |
cfg | string | 配置文件参数参数名称与action=set配合完成参数设置 |
返回参数如下:
{
"data": {
"addr": ":8080",
"admin_ips": [
"127.0.0.1"
],
"alarm_receivers": [],
"alarm_url": "",
"auth_url": "",
"auto_repair": true,
"default_download": true,
"default_scene": "default",
"download_domain": "",
"download_token_expire": 600,
"download_use_token": false,
"enable_cross_origin": true,
"enable_custom_path": true,
"enable_distinct_file": true,
"enable_download_auth": false,
"enable_google_auth": false,
"enable_merge_small_file": false,
"enable_migrate": false,
"enable_tus": true,
"enable_web_upload": true,
"extensions": [],
"file_sum_arithmetic": "md5",
"group": "group1",
"host": "http://192.168.88.132:8080",
"mail": {
"host": "smtp.163.com:25",
"password": "abc",
"user": "[email protected]"
},
"peer_id": "1",
"peers": [
"http://192.168.88.1"
],
"queue_size": 10000,
"read_only": false,
"refresh_interval": 1800,
"rename_file": false,
"scenes": [],
"show_dir": true,
"support_group_manage": false
},
"message": "",
"status": "ok"
}
2.文件统计信息API
http://192.168.88.132:8080/stat
返回参数如下:
{
"data": [
{
"date": "20190625",
"fileCount": 3,
"totalSize": 94210
},
{
"date": "20190627",
"fileCount": 0,
"totalSize": 0
},
{
"date": "all",
"fileCount": 3,
"totalSize": 94210
}
],
"message": "",
"status": "ok"
}
3.系统状态信息API
http://192.168.88.132:8080/status
返回参数如下:
{
"data": {
"Fs.AutoRepair": true,
"Fs.FileStats": [
{
"date": "20190625",
"fileCount": 3,
"totalSize": 94210
},
{
"date": "20190627",
"fileCount": 0,
"totalSize": 0
},
{
"date": "all",
"fileCount": 3,
"totalSize": 94210
}
],
"Fs.Local": "http://192.168.88.132:8080",
"Fs.Peers": [
"http://192.168.88.1"
],
"Fs.QueueFileLog": 0,
"Fs.QueueFromPeers": 0,
"Fs.QueueToPeers": 0,
"Fs.RefreshInterval": 1800,
"Fs.ShowDir": true,
"Sys.Alloc": 47888528,
"Sys.Frees": 7989,
"Sys.GCCPUFraction": 0.000016509381835168312,
"Sys.GCSys": 2977792,
"Sys.HeapAlloc": 47888528,
"Sys.HeapObjects": 7580,
"Sys.NumCpu": 4,
"Sys.NumGC": 15,
"Sys.NumGoroutine": 437,
"Sys.TotalAlloc": 90639280
},
"message": "",
"status": "ok"
}
4.文件上传API
http://192.168.88.132:8080/upload
参数:
参数名 | 类型 | 描述 |
file | string | 上传的文件 |
scene | string | 默认default |
path | string | 自定义存储路径 |
output | string | 输出格式默认json |
auth_token | string | 非必须,配置文件设置是否必须 |
返回参数如下:
{
"url":"http://192.168.88.132:8080/group1/test/企业微信截图_15616176241551.png",
"md5":"baa10e8600a47f2aa0f8c2c926cfe409",
"path":"/group1/test/企业微信截图_15616176241551.png",
"domain":"http://192.168.88.132:8080",
"scene":"default",
"size":79491,
"mtime":1561619383,
"scenes":"default",
"retmsg":"",
"retcode":0,
"src":"/group1/test/企业微信截图_15616176241551.png"
}
5.文件删除
http://192.168.88.132:8080/delete?md5=
参数:
参数名 | 类型 | 描述 |
md5 | string | 图片的MD5值与Path二选一 |
path | string | 文件上传后返回的路径,与MD5值二选一 |
说明:md5或path都是上传文件时返回的信息,要以json方式返回才能看到(参阅浏览器上传)
返回参数:
{
"data": null,
"message": "remove success",
"status": "ok"
}
6.获取文件信息
http://192.168.88.132:8080/get_file_info?md5=
参数:
参数名 | 类型 | 描述 |
md5 | string | 图片的MD5值与Path二选一 |
path | string | 文件上传后返回的路径,与MD5值二选一 |
说明:md5或path都是上传文件时返回的信息,要以json方式返回才能看到(参阅浏览器上传)
返回参数:
{
"data": {
"md5": "8fe6dcd07da307ac3fd128aedccd2e45",
"name": "企业微信截图_15613392198494.png",
"offset": -1,
"path": "files/test",
"peers": [
"http://192.168.88.132:8080"
],
"rename": "",
"scene": "default",
"size": 18866,
"timeStamp": 1561623822
},
"message": "",
"status": "ok"
}
7.搜索文件信息
http://192.168.88.132:8080/search?md5=
参数:
参数名 | 类型 | 描述 |
md5 | string | 图片的MD5值与Path二选一 |
path | string | 文件上传后返回的路径,与MD5值二选一 |
说明:md5或path都是上传文件时返回的信息,要以json方式返回才能看到(参阅浏览器上传)
返回参数:
{
"data": [
{
"md5": "d41d8cd98f00b204e9800998ecf8427e",
"name": "企业微信截图_15613394634070.png",
"offset": -1,
"path": "files/test",
"peers": [
"http://192.168.88.132:8080"
],
"rename": "",
"scene": "default",
"size": 0,
"timeStamp": 1561624299
},
{
"md5": "794a1079f1cbfbacc4c4404d59ce1917",
"name": "企业微信截图_15613392903775.png",
"offset": -1,
"path": "files/test",
"peers": [
"http://192.168.88.132:8080"
],
"rename": "",
"scene": "default",
"size": 35224,
"timeStamp": 1561457713
},
{
"md5": "8fe6dcd07da307ac3fd128aedccd2e45",
"name": "企业微信截图_15613392198494.png",
"offset": -1,
"path": "files/default/20190627/18/00/1",
"peers": [
"http://192.168.88.132:8080"
],
"rename": "",
"scene": "default",
"size": 18866,
"timeStamp": 1561629630
}
],
"message": "",
"status": "ok"
}
8.获取文件列表
http://192.168.88.132:8080/list_dir?dir=test
参数:
参数名 | 类型 | 描述 |
dir | string | 文件夹名字 |
返回参数:
{
"data": [
{
"is_dir": false,
"md5": "6ce2b43b9ffd3237a30aeac2a88e355f",
"mtime": 1561457713,
"name": "企业微信截图_15613392903775.png",
"path": "test",
"size": 35224
},
{
"is_dir": false,
"md5": "37ea6cda16362a3c4af86ba8614dde0c",
"mtime": 1561624299,
"name": "企业微信截图_15613394634070.png",
"path": "test",
"size": 0
}
],
"message": "",
"status": "ok"
}
9.同步文件
http://192.168.88.132:8080/sync?date=20160502&force=1
参数:
参数名 | 类型 | 描述 |
date | string | 日期,格式为20160502 |
force | int | 1.表示是否强制同步当天所有(性能差),0.表示只同步失败的文件 |
返回参数:
{
"data": null,
"message": "require paramete date \u0026force , ?date=20181230",
"status": "fail"
}
项目地址:https://github.com/perfree/go-fastdfs-web
各打包版本下载地址:https://github.com/perfree/go-fastdfs-web/releases
0.介绍
go-fastdfs在官方文档中有介绍为了方便对文件的监控是支持Web端后台管理系统.
1.安装
到官网地址https://github.com/perfree/go-fastdfs-web/releases下载所需要的版本
config文件夹:主要的一些配置文件信息,如端口号等。
log文件夹:日志信息文件。
db文件夹:里面是存储一些fastDFS的设置信息,如文件系统部署机器的ip,集群,登录用户名等信息。
启动
使用管理脚本启动,在使用脚本启动时遇到因为编码问题找不到Shell脚本解析器,使用以下方式解决编码问题,并使用脚本运行成功.
sed -i 's/\r$//' goFastDfsWeb.sh 编码设置
./goFastDfsWeb.sh start 脚本运行
Start go-fastdfs-web.jar success... 运行成功信息
2.登录
启动后我们可以直接登录管理后台系统 http://youserver_ip:8088,默认端口是8088,也可以在配置文件中设置,登录后会进入配置信息界面,如下。
按自己的go-fastDFS配置文件的信息,填写并设置用户名和密码登入。
登入以后可以再管理系统中可以批量上传、删除、对集群的管理等操作。
1.如何上传文件夹?
DIR=log && ls DIR -F file=@$DIR/{} http://192.168.88.132:8080/upload
上面命令的log为要上传的目录,如果代码上传就是简单的循环上传就OK。
2.如何缩放图片?
在下载url中加入width各height参数
例如:http://192.168.88.132:8080/group1/test/15613392198494.png?download=0&width=100&height=100
特明说明是:如果要等比例缩放,请将width或height设为0
3.如何在浏览器中直接显示图片?
在下载url中加入download=0参数
例如:http://192.168.88.132:8080/group1/test/15613392198494.png?download=0
4.Docker如何部署?
步骤:
方式一、
一、构建镜像
docker build . -t fastdfs
二、运行容器(使用环境变量 GO_FASTDFS_DIR 指向存储目录。)
docker run –name fastdfs -v /data/fastdfs_data:/data -e GO_FASTDFS_DIR=/data fastdfs
方式二、
一、拉取镜像
docker pull sjqzhang/go-fastdfs
二、运行容器
docker run –name fastdfs -v /data/fastdfs_data:/data -e GO_FASTDFS_DIR=/data fastdfs