• Stars
    star
    224
  • Rank 177,792 (Top 4 %)
  • Language
    Go
  • License
    BSD 3-Clause "New...
  • Created over 7 years ago
  • Updated 7 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

WFS File Storage System

wfs是文件存储系统

主要是解决海量小文件存储的问题,服务器对海量小文件独立存储会出现许多问题
单个wfs可以单独运行 ,也可以多个wfs集群


支持

上传文件,删除文件,拉取文件
对图片文件输出大小处理:
如:1.jpg?imageView2/0/w/100/h/100 输出宽高 100px的图片

启动wfs

直接启动:./wfs (默认监听端口:3434)
或带参数启动 ./wfs -max 50000000 -p 3434 参数说明: -max是上传文件大小限制(单位字节) -p启动端口(默认3434)

示例:

curl 上传文件

(1) 将文件直接上传服务器,地址为 http://*****:3434/u :如

curl -F "[email protected]" "http://127.0.0.1:3434/u"
则上传文件 1.jpg
 上传完成后访问文件 :http://127.0.0.1:3434/r/1.jpg 	

(2)将文件直接上传服务器,并指定文件名 地址为 http://*****:3434/u/文件名, 文件名同时也是访问的路径,如:

curl -F "[email protected]" "http://127.0.0.1:3434/u/abc/11"
上传文件1.jpg 文件名 abc/11
上传完成后访问文件 :http://127.0.0.1:3434/r/abc/11

curl 删除文件

 curl -X DELETE "http://127.0.0.1:3434/d/1.jpg"
删除文件 1.jpg

 curl -X DELETE "http://127.0.0.1:3434/d/abc/11"
 删除文件 abc/11

支持在程序中使用客户端操作wfs

 wfsPost()    上传文件
 wfsRead()   拉取文件
 wfsDel()      删除文件

以python客户端为例

url :http://*****:3434/thrift  固定格式
wfs = WfsClient("http://127.0.0.1:3434/thrift")
bs= getFileBytes("1.jpg")  获取图片
wfs.PostFile(bs,"aa/head.jpg","")   上传图片,并自定义图片路径aa/head.jpg
f=wfs.GetFile("aa/head.jpg") 拉取图片 aa/head.jpg 资源
print(len(f.fileBody))   
saveFileByBytes(f.fileBody,"22_1.jpg")
wfs.DelFile("aa/head.jpg")   删除图片
wfs.Close()

wfs的图片处理

访问图片时,可以加参数来获取压缩后的图片
规则是:图片路径后+?imageView2/mode/w/Width/h/Height 如:

imageView2固定
mode 有 0,1,2,3,4,5 分别输出缩略图 限定的宽或高
w后为宽:如:w/100
h后为高:如:h/100

规则的制定是参考七牛云存储 所以mode规则也可以参考

http://127.0.0.1:3434/r/1.jpg?imageView2/0/w/100/h/100
http://127.0.0.1:3434/r/1.jpg?imageView2/1/w/100/h/100 
http://127.0.0.1:3434/r/1.jpg?imageView2/2/w/100
http://127.0.0.1:3434/r/1.jpg?imageView2/3/h/100

模式	 mode 说明
/0/w/<LongEdge>/h/<ShortEdge>	限定缩略图的长边最多为<LongEdge>,短边最多为<ShortEdge>,进行等比缩放,不裁剪。如果只指定 w 参数则表示限定长边(短边自适应),只指定 h 参数则表示限定短边(长边自适应)。
/1/w/<Width>/h/<Height>	限定缩略图的宽最少为<Width>,高最少为<Height>,进行等比缩放,居中裁剪。转后的缩略图通常恰好是 <Width>x<Height> 的大小(有一个边缩放的时候会因为超出矩形框而被裁剪掉多余部分)。如果只指定 w 参数或只指定 h 参数,代表限定为长宽相等的正方图。
/2/w/<Width>/h/<Height>	限定缩略图的宽最多为<Width>,高最多为<Height>,进行等比缩放,不裁剪。如果只指定 w 参数则表示限定宽(高自适应),只指定 h 参数则表示限定高(宽自适应)。它和模式0类似,区别只是限定宽和高,不是限定长边和短边。从应用场景来说,模式0适合移动设备上做缩略图,模式2适合PC上做缩略图。
/3/w/<Width>/h/<Height>	限定缩略图的宽最少为<Width>,高最少为<Height>,进行等比缩放,不裁剪。如果只指定 w 参数或只指定 h 参数,代表长宽限定为同样的值。你可以理解为模式1是模式3的结果再做居中裁剪得到的。
/4/w/<LongEdge>/h/<ShortEdge>	限定缩略图的长边最少为<LongEdge>,短边最少为<ShortEdge>,进行等比缩放,不裁剪。如果只指定 w 参数或只指定 h 参数,表示长边短边限定为同样的值。这个模式很适合在手持设备做图片的全屏查看(把这里的长边短边分别设为手机屏幕的分辨率即可),生成的图片尺寸刚好充满整个屏幕(某一个边可能会超出屏幕)。
/5/w/<LongEdge>/h/<ShortEdge>	限定缩略图的长边最少为<LongEdge>,短边最少为<ShortEdge>,进行等比缩放,居中裁剪。如果只指定 w 参数或只指定 h 参数,表示长边短边限定为同样的值。同上模式4,但超出限定的矩形部分会被裁剪。

wfs提供了分片支持,分片可以解决单个节点的资源限制问题

wfs -slavelist 查询目前的节点 
wfs -addslave slave1:192.168.1.101:3434  增加分片 节点名slave1,地址:192.168.1.101:3434
wfs -addslave slave2:192.168.1.102:3434  增加分片 节点名slave2,地址:192.168.1.102:3434
wfs -removeslave slave1  删除分片slave1

目前客户端有: python java golang:

使用客户端操作 通过通讯协议的压缩传输 会更加快捷

  1. java : https://github.com/donnie4w/wfs-jclient
  2. go : https://github.com/donnie4w/wfs-goclient
  3. python : https://github.com/donnie4w/wfs-pyclient

More Repositories

1

tim

Tim is a decentralized and distributed instant messaging engine
Go
373
star
2

go-logger

go高性能日志库, 支持日志格式化, 文件切割,压缩等特性
Go
273
star
3

dom4g

golang 的 xml 处理库
Go
52
star
4

zkfire

zkfire是openfire的一套集群实现
46
star
5

tklog

lightweight and efficient rust structured log library with support for log levels, file segmentation, compressed archiving
Rust
43
star
6

tldb

distributed database
Go
34
star
7

json4g

json4g 是json 处理库,方便处理结构复杂的json文档
Go
32
star
8

jdao

Java Orm Framework
Java
24
star
9

gdao

Go Orm Framework
Go
23
star
10

webtim

web im projects implemented using timjs in tim
JavaScript
17
star
11

timgo

tim client in go
Go
13
star
12

atim

tim client in java
Java
11
star
13

wfs-jclient

wfs client in java
Java
8
star
14

tlmq-j

mq client for tldb
Java
7
star
15

wfs-goclient

wfs client in go
Go
6
star
16

tlmq-go

tldb mq client
Go
5
star
17

wfs4k

wfs的kotlin实现版本
Kotlin
5
star
18

webtim-deploy

webtim的各个操作系统本地部署脚本
4
star
19

dbware

数据库代理服务器
Java
3
star
20

gofer

tool library for go
Go
2
star
21

wfs4j

wfs的java实现版本
Java
2
star
22

Tim-Practical-Article

tim实践系列文章
2
star
23

wfs-rsclient

wfs client in rust
Rust
2
star
24

thriftjson

让thrift兼容原生json数据调用的解决方案
Java
2
star
25

jdaodemo

Jdao Test Demo
Java
1
star
26

gdaodemo

gdao test demo
Go
1
star
27

timkotlin

tim服务的kotlin客户端
Kotlin
1
star
28

simplelog

Fast, simple logging in go
Go
1
star
29

jedisproxy

jedisproxy 是对jedis的一层封装,主要对获取客户端操作对象,释放资源操作做了一层封装 让代码更加简洁
Java
1
star
30

ethchat

chat contracts based on solidity
Solidity
1
star
31

admintim

management interface for tim in python
Python
1
star
32

tlorm-go

go orm for tldb database
Go
1
star
33

timjs

tim client in javascript
JavaScript
1
star
34

tim-protocol

protocol of tim by the popular programming language
C
1
star
35

videojoin

js achieve video can be played continuously
JavaScript
1
star
36

tlnet

http service framework
Go
1
star
37

wfs-pyclient

wfs client in python
Python
1
star