基于golang http包实现的文件服务器

基于golang http包实现的文件服务器

代码仓库:https://github.com/danny-wang/repo

基本功能

  1. 压缩模式或正常上传
  2. 压缩模式或正常下载
  3. 获取文件服务器状态,包括服务器域名(name:port),当前有多少文件等
  4. 获取某一文件的状态(创建时间,下载路径,超时过期时间,MD5)
  5. 获取某一个文档中的所有文件的状态(可指定是否递归进入子文档,是否只匹配某一个后缀的文件)
  6. 删除过期文件
  7. 备份数据库

使用方式

方式一:直接使用curl命令调用:

上传文件:

普通模式上传:上传文件和服务器中的文件一致

curl  -F "file=@bolt" -F dest=/jianwang/bolt.txt  -F expiredTime=2h  -F replaceIfExist=false  "http://localhost:50010/r/upload/"

返回值:

{"Status":0,"Msg":"file exist","File":{"CreateTime":"0001-01-01T00:00:00Z","Md5":"","ExpiredTime":"0001-01-01T00:00:00Z"}}

压缩模式上传:对于上传的文件会使用gunzip解压缩,然后存储到文件服务器中。假设被上传的文件是使用gzip压缩后的压缩文件。

curl -H "Content-Encoding: gzip"  -F "file=@1.png.gz" -F dest=/jianwang/3.png  -F expiredTime=2h  -F replaceIfExist=false  "http://localhost:50010/r/upload/"

返回值:

{"Status":0,"Msg":"OK","File":{"CreateTime":"2017-11-22T15:43:08.397174566+08:00","Md5":"e16b119e535c5ebbe8b59ef766335f1c","ExpiredTime":"2017-11-22T17:43:08.397178023+08:00","DownloadPath":"http://localhost:50010/r/download/jianwang/3.png"}}
下载文件
Normal download: 正常下载,服务器不会压缩数据进行传输
curl -O http://localhost:50010/r/download_file/jianwang/ads.111
Gzip compress mode to download:  指定服务器可以以压缩方式传输文件,客户自己负责解压与否
curl -H "Accept-Encoding: gzip"   http://localhost:50010/r/download_file/jianwang/ads.111 | gunzip >a.dmg

其他请求可以直接阅读repo.go中的注释

方式二:客户端代码调用

参考repo/client/test.go中的代码

方式三:通过网页

直接访问 http://localhost:50010/r/list/,即可查看数据库中的文件

主要技术

  • 使用boltdb文件数据库存储数据库中文件的元信息
  • 以json格式传输调用的返回值
  • 使用协程定期删除过期的文件
  • 存储文件的MD5码来方便的比较服务器中的文件是否与本地一致
  • 使用glide包管理工具来管理依赖包
gohttp是一个http文件服务器,因为是用go语言写的,所以加了一个go的抬头。之所以用go是因为发布起来是一个二进制文件,不同的平台都可以用,而且没有依赖问题,且稳定性也很好。    这个软件从很久以前就开始写了,第一次提交实在2015年的2月11号,作为组内存放公共文件的一个小软件。一开始的功能只有像 python -mSimpleHTTPServer 那种简单的功能。但是当我看到gotty这个软件的时候 ,意思到一个简单的软件竟然可以做到如此出色。之后这个http文件服务器就不断的被优化着,保持着简单易用的同时,开始赋予了它最强大的功能。    这个软件有很多的技术,隐藏在了其简易朴实的外表之下。请容我简单的介绍下pjax简称页面ajax技术        在gohttp进行目录却换的时候,你会看到地址栏在变,但是页面却是局部刷新的。各种文件的预览功能        所有常见的代码都可以直接在gohttp下预览,如果你用的是chrome浏览器的话,括pdf,mp4,mp3都可以直接预览。实时的目录zip打下载        强大的体现在它是实时的,即使你马上在目录下新增了一个文件,点击目录zip下载的时候,这个文件也会出现在里面。二维码的支持        手机下载往往没有电脑下载这么容易,点点鼠标就可以了。但是有了二维码,手机也只用扫一扫就可以下载了。苹果应用的在线安装        iphone应用安装的扩展名是ipa,但是你还必须有个额外的plist文件才行。以及生成一个itms-services开头的地址,gohttp直接把这些工作都做了,ipa的解析,plist以及下载页面的自动生成。同普通文件一样,只需要点击右侧的生成二维码,然后用iphone手机扫描下,iphone的应用就安装到了你的手机上。PS:坑爹的苹果,就不能像安卓一样简单一点吗README文件的自动显示像github网站上的项目,readme文件都会作为项目的介绍自动显示出来。gohttp也借鉴了一下。如果目录下有readme文件的话,就会自动预览出来。文件上传简单的文件上传也有着出色的表现,可以看到上传的进度,以及支持拖拽的方式上传文件。为了更方便的结合自动发布的功能,文件上传也有其相应的API,上传的时候也可是指定软件的版本号,存储结构参考了python,pypi官方的模式。还有很多很多其他的特性    http basic auth认证,不同文件不同的icon,gzip支持,目录的整合显示.... 还有很多功能等待着你去发现和有能力的你去补充。    截图  标签:gohttp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值