额,可能大家都不知道 Rikka ,见我上次的帖子: https://www.v2ex.com/t/303578
简单来说 Rikka 是个 「个人图床系统」,好吧我知道很多人写过这种了(比如很好用的 iPic )……然而,谁叫我刚学 Golang 呢,随便找了个项目当 Helloworld 而已。
最开始的 Rikka 只是个小项目,只能把文件储存在当前服务器,然后开一个静态文件 Handler 来提供这些图片。后来我想了想,把储存后端变成了插件的形式,这样可以支持储存在不同的服务里,便于后期加插件。
然后这几天把七牛云的插件写完了,我自己基本上就准备长期使用了。
对了, Rikka 是发布了 Docker 镜像的,自己部署起来超级方便!
随便在 DaoCloud 上部署了两个:
使用默认 FS 插件的 Demo : http://7sdream-rikka-demo.daoapp.io/
使用七牛云插件的 Demo : http://7sdream-rikka-qiniu.daoapp.io/
密码都是 rikka
。
首页截图:
预览页面截图:
从前端是看不出什么不同的,但是你上传一张文件之后从给出的图片源地址就能看出不同了。
Rikka 带了一个 CLI ,叫 Rikkac 使用效果如下:
Rikkac 的文档: https://github.com/7sDream/rikka/blob/master/rikkac/README.zh.md
很早就在 Github 上了: https://github.com/7sDream/rikka
Web 前端, Web 后端, RESTful API 定义, API Server ,插件, Rikkac CLI 都在这。
基本上中文英文都写了,但是英文有点拙计,这里放中文的。
README : https://github.com/7sDream/rikka/blob/master/README.zh.md
部署文档: https://github.com/7sDream/rikka/blob/master/deploy.zh.md
DaoCloud 部署教程:
后面的计划的话,首先是支持 https ,然后是新浪微博插件,如果有人需要的话。然后是上传请求的 CSRF ,以及请求限制,自动 ban IP 。
敬请期待。
PS :
感觉还是挺全栈的一个项目吧,如果是新学 Golang 的小伙伴应该可以看看,能学到一些的,比如插件架构之类的。
然后请各大 Golang 大神如果感兴趣的话,指导一下就更好了!谢谢。
恩,刚去更新了一个 0.2.1 把文件后缀补上了。
现在不管是往 fs demo 还是 qiniu demo 里传的文件都有 正确的 后缀了。
jpg 图片后缀会变成 jpeg,因为上传之后会用 mime type 判断真实类型,然后确定后缀名,而 jpg 的 mine type 是 image/jpeg
。
其他 png bmp gif 并不会有什么变化。
(虽然并没有多少人能看到这条附言吧……
1
Maic 2016-09-11 17:23:11 +08:00
沙发, 77 是我的~~
|
2
majinjing3 2016-09-11 17:29:20 +08:00 via Android
支持下,感觉不错~支持 post 直接上传图片么?
|
3
aljun 2016-09-11 17:31:50 +08:00 via iPhone
膜 77
|
4
7sDream OP @majinjing3
支持的,不过需要用 multipart/form-data 的形式。 使用 curl 的例子:![]( http://7sdream-rikka-demo.daoapp.io/files/2016-09-11-420787291) 具体可看 API 文档: https://github.com/7sDream/rikka/blob/master/api/README.zh.md |
6
huihuimoe 2016-09-11 17:39:26 +08:00 via Android
呆毛拔掉٩(๑òωó๑)۶
|
8
snnn 2016-09-11 17:51:08 +08:00
不错!
lz 加油! |
10
isCyan 2016-09-11 18:46:25 +08:00
支持!
我之前也做了个图床 https://www.fotokl.com 像你这种图床程序很多,我之前也做过一个类似的,但后来发现有时还有一个需求,就是想看看我之前上上传过什么图片,然后再次复制链接,或者删除掉。 于是我就做了上面的那个图床…… |
11
7sDream OP @isCyan
是的呀!但是: http://odbw8jckg.bkt.clouddn.com/573ad160-4f3e-494e-b541-ab0972ed7db0 嗯,这是个个人用的,目的就是每个人都能搭一个自己的自己用,而且有 CLI 方便用,所以有 Docker Image~ 需求不同罢了呀~ |
12
jeremaihloo 2016-09-11 19:00:41 +08:00 via Android
讲道理,如果读 利卡,就不要写读音为瑞卡的英文,还跟我说这不读瑞卡
乾杯 []~( ̄▽ ̄)~* |
13
Satan4869 2016-09-11 19:43:24 +08:00
用七牛的时候出现的问题:
![]( http://7sdream-rikka-demo.daoapp.io/files/2016-09-11-583572553) 并没有返回链接地址 用 FS 的时候出现的问题: ![]( http://7sdream-rikka-demo.daoapp.io/files/2016-09-11-453118819) 返回了地址,但是顶部提示出错 另外,网站顶部会经常出现出错的提示……有两次上传图片均没有成功…… |
14
ipconfiger 2016-09-11 19:45:57 +08:00
貌似本站不打算支持七牛云
|
15
strwei 2016-09-11 19:55:03 +08:00
希望支持 https
|
16
Satan4869 2016-09-11 19:58:17 +08:00
|
17
imWBB 2016-09-11 20:22:25 +08:00 via Android
图片格式哪去了
另外求支持 upyun |
18
7sDream OP |
19
7sDream OP |
20
7sDream OP |
22
7sDream OP |
23
7sDream OP @Satan4869
具体请看: https://github.com/7sDream/rikka/blob/master/README.zh.md#特点 后面的注释 前端也是用的 Rikka 的 API 的, JS 代码都在 server/webserver/static/js 里,因为我确实前端没怎么学,如果您能把他改写成兼容大多数浏览器的话,感激不尽! |
24
isCyan 2016-09-11 20:58:40 +08:00
@7sDream
1. HTTPS 不是已经支持了吗…… 2. 文件上传后原始地址增加文件后缀 这个你打算是判断 mime-type 然后分配一个还是 保持文件原状? 如果保持原状就可能有 xxx.jpg xxx.jpeg xxx.JPG xxx.JPEG ... 或者,可以判断后缀名(而不是 mime-type )但是统一起来…… |
25
isCyan 2016-09-11 21:01:12 +08:00
@7sDream 日语罗马音 ra 行还有 tsu 还有 fu 之类的都是不符合中文拼音的,而且他们的 u 并不是 wu ,日语就这样。。
|
26
7sDream OP @isCyan
没呢,不过 HTTPS 支持起来不难,但是需要部署的用户自己提供证书。 当然是 mine ,目前上传之前在 client side 和上传到 server 之后都会判断 mime type 的,而且会 server side 是根据文件内容检测出 mime type 而不是 request header ,用的 `http.DetectContentType` 这个函数。 目前只允许: jpeg , bmp , png , gif 这四种,不过日常应该够用了。 代码在: https://github.com/7sDream/rikka/blob/master/server/apiserver/upload.go#L85 左右。 |
27
7sDream OP @isCyan
恩呢,很明显 Rikka 这个名字就是来源于六花嘛: Takanashi Rikka ,连首页图片都是她惹~ https://zh.moegirl.org/zh/%E5%B0%8F%E9%B8%9F%E6%B8%B8%E5%85%AD%E8%8A%B1 |
30
7sDream OP @isCyan
那就加个参数开关好了,不想上 NGINX 的就用这个自带的。不过话说这是个人图床,作为七牛云或者又拍云的前端,其实也不会有什么巨大的访问量,倒也不用上 NGINX 之类的,我个人其实都基本用 CLI 上传的说~ 嘿,然而我虽然看动漫但是日语完全不会呀……感觉也要去学点日语才行~ |
31
diefishfish 2016-09-11 22:52:22 +08:00 via Android
如果想批量上传肿么办
|
32
7sDream OP @diefishfish
目前计划 API 不接受批量上传。 但是 Rikkac CLI 之后应该会支持批量上传的~ 已加入 TODO List : http://odbw8jckg.bkt.clouddn.com/7cb2b7ef-c44d-4acc-8ff9-115647848b11.png |
33
hanmiao 2016-09-12 01:32:02 +08:00
支持
|
35
chocotan 2016-09-12 10:03:02 +08:00
@jeremaihloo 这是日文罗马音
|
36
w7938940 2016-09-12 10:12:57 +08:00
http://yotuku.cn/ 这个七牛的也不错
|
37
7sDream OP |
38
ljcarsenal 2016-09-12 14:31:06 +08:00
golang 不好找工作啊
|
39
7sDream OP |
40
majinjing3 2016-09-12 14:57:38 +08:00
@7sDream 我这边有个需要,同时直接多个源的上传,比如微博, FS ,七牛,三个源都上传,每个图片有唯一的 id ,通过 api 获取所有源的地址,当然也可以直接根据 id 获取对应源的地址,或者直接加载,这样可以首先加载微博,然后再是 FS ,七牛,(省流量嘛。。。。
|
41
7sDream OP @majinjing3
恩,虽然目前的架构师单插件模式, ID 由插件负责生成,但是我想了一下改成同时多插件模式也并没有太大的难度,所以直接多个源上传如果需要是可以写的。 但是后面这个 「或者直接加载,这样可以首先加载微博,然后再是 FS ,七牛,(省流量嘛。。。。」 这一段是要干啥我没太看懂……是说预览页面的加载么? |
42
douyang 2016-09-12 16:13:30 +08:00
|
44
majinjing3 2016-09-12 16:39:08 +08:00 via Android
@7sDream 后面这段是写给应用层自己处理的哈,只有有 api 可以调用就好了
|
45
7sDream OP |
46
majinjing3 2016-09-12 18:36:46 +08:00 via Android
@7sDream 纯个人需求,小网站,图片较多,又不想花太多钱在存储上面,多几个源,做冗余,加载图片的时候,网页端检查可用性,就好了,
另外,如果有时间,我也可以帮忙写写代码,也一直在关注 golang |
47
Arnie97 2016-09-13 00:00:48 +08:00 via Android
客户端应该叫 Yuuta ,哈哈哈
|