V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
7sDream
V2EX  ›  Go 编程语言

Rikka 更新辣 支持七牛云了

  •  3
     
  •   7sDream ·
    7sDream · 2016-09-11 17:20:24 +08:00 · 2955 次点击
    这是一个创建于 3029 天前的主题,其中的信息可能已经有所发展或是发生改变。

    简介

    额,可能大家都不知道 Rikka ,见我上次的帖子: https://www.v2ex.com/t/303578

    简单来说 Rikka 是个 「个人图床系统」,好吧我知道很多人写过这种了(比如很好用的 iPic )……然而,谁叫我刚学 Golang 呢,随便找了个项目当 Helloworld 而已。

    最开始的 Rikka 只是个小项目,只能把文件储存在当前服务器,然后开一个静态文件 Handler 来提供这些图片。后来我想了想,把储存后端变成了插件的形式,这样可以支持储存在不同的服务里,便于后期加插件。

    然后这几天把七牛云的插件写完了,我自己基本上就准备长期使用了。

    对了, Rikka 是发布了 Docker 镜像的,自己部署起来超级方便!

    Demo 截图

    随便在 DaoCloud 上部署了两个:

    使用默认 FS 插件的 Demo : http://7sdream-rikka-demo.daoapp.io/

    使用七牛云插件的 Demo : http://7sdream-rikka-qiniu.daoapp.io/

    密码都是 rikka

    首页截图:

    预览页面截图:

    从前端是看不出什么不同的,但是你上传一张文件之后从给出的图片源地址就能看出不同了。

    CLI

    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 大神如果感兴趣的话,指导一下就更好了!谢谢。

    第 1 条附言  ·  2016-09-11 20:45:27 +08:00
    根据大家的反馈,后续的计划是这样的:

    - 文件上传后原始地址增加文件后缀
    - 支持又拍云
    - 支持 HTTPS
    - 改善前端代码的浏览器兼容性

    以后大更新了也会再发一个帖子的~

    谢谢大家支持!
    第 2 条附言  ·  2016-09-11 21:09:17 +08:00
    那个啥,已经发现有人往图床里传小黄图了……

    因为你们其实都是往我服务器和 Qiniu Bucket 里传……所以这些图片如果我不小心看到就会删的哟,并且作为 Demo site ,里面的图片也会偶尔清空的,所以不要日常使用辣。

    所以说你们自己搭一个嘛,教程都写好了,而且 Docker 也很好用,很 Easy 的。

    恩,以上~~

    ( PS :我可以看到你们上传的图片这也恰恰说明了公共服务的不安全,我写这个个人图床系统的目的也就在此了。
    第 3 条附言  ·  2016-09-11 23:22:28 +08:00

    恩,刚去更新了一个 0.2.1 把文件后缀补上了。

    现在不管是往 fs demo 还是 qiniu demo 里传的文件都有 正确的 后缀了。

    jpg 图片后缀会变成 jpeg,因为上传之后会用 mime type 判断真实类型,然后确定后缀名,而 jpg 的 mine type 是 image/jpeg

    其他 png bmp gif 并不会有什么变化。

    (虽然并没有多少人能看到这条附言吧……

    48 条回复    2016-09-13 00:24:11 +08:00
    Maic
        1
    Maic  
       2016-09-11 17:23:11 +08:00
    沙发, 77 是我的~~
    majinjing3
        2
    majinjing3  
       2016-09-11 17:29:20 +08:00 via Android
    支持下,感觉不错~支持 post 直接上传图片么?
    aljun
        3
    aljun  
       2016-09-11 17:31:50 +08:00 via iPhone
    膜 77
    7sDream
        4
    7sDream  
    OP
       2016-09-11 17:31:51 +08:00
    @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
    7sDream
        5
    7sDream  
    OP
       2016-09-11 17:33:02 +08:00
    @aljun

    膜 in 神!!
    huihuimoe
        6
    huihuimoe  
       2016-09-11 17:39:26 +08:00 via Android
    呆毛拔掉٩(๑òωó๑)۶
    7sDream
        7
    7sDream  
    OP
       2016-09-11 17:40:30 +08:00
    @huihuimoe

    护住!

    (重点错
    snnn
        8
    snnn  
       2016-09-11 17:51:08 +08:00
    不错!
    lz 加油!
    7sDream
        9
    7sDream  
    OP
       2016-09-11 18:21:52 +08:00 via iPhone
    @snnn

    蟹蟹支持!
    isCyan
        10
    isCyan  
       2016-09-11 18:46:25 +08:00
    支持!
    我之前也做了个图床 https://www.fotokl.com
    像你这种图床程序很多,我之前也做过一个类似的,但后来发现有时还有一个需求,就是想看看我之前上上传过什么图片,然后再次复制链接,或者删除掉。
    于是我就做了上面的那个图床……
    7sDream
        11
    7sDream  
    OP
       2016-09-11 18:54:20 +08:00
    @isCyan

    是的呀!但是: http://odbw8jckg.bkt.clouddn.com/573ad160-4f3e-494e-b541-ab0972ed7db0

    嗯,这是个个人用的,目的就是每个人都能搭一个自己的自己用,而且有 CLI 方便用,所以有 Docker Image~

    需求不同罢了呀~
    jeremaihloo
        12
    jeremaihloo  
       2016-09-11 19:00:41 +08:00 via Android
    讲道理,如果读 利卡,就不要写读音为瑞卡的英文,还跟我说这不读瑞卡

    乾杯 []~( ̄▽ ̄)~*
    Satan4869
        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)
    返回了地址,但是顶部提示出错

    另外,网站顶部会经常出现出错的提示……有两次上传图片均没有成功……
    ipconfiger
        14
    ipconfiger  
       2016-09-11 19:45:57 +08:00
    貌似本站不打算支持七牛云
    strwei
        15
    strwei  
       2016-09-11 19:55:03 +08:00
    希望支持 https
    Satan4869
        16
    Satan4869  
       2016-09-11 19:58:17 +08:00
    imWBB
        17
    imWBB  
       2016-09-11 20:22:25 +08:00 via Android
    图片格式哪去了

    另外求支持 upyun
    7sDream
        18
    7sDream  
    OP
       2016-09-11 20:39:40 +08:00
    @Satan4869

    请使用 Chrome 最新版……

    我前端不是很懂,所以直接用 es6 写的…… Safari 9 不支持 QwQ
    7sDream
        19
    7sDream  
    OP
       2016-09-11 20:40:01 +08:00
    @jeremaihloo

    然而这是罗马音呀……我也没办法 QwQ
    7sDream
        20
    7sDream  
    OP
       2016-09-11 20:40:28 +08:00
    @ipconfiger

    如果有需要我还是可以写的~~

    可能后来会出个插件文档,需要支持什么可以自己写插件~
    7sDream
        21
    7sDream  
    OP
       2016-09-11 20:40:52 +08:00
    @strwei

    正在计划中,应该下一个大更新会加上~
    7sDream
        22
    7sDream  
    OP
       2016-09-11 20:41:34 +08:00
    @imWBB

    fs 插件用的日期 + 序号, qiniu 插件用的 uuid ,如果真的需要图片格式的话下个版本我加上~
    7sDream
        23
    7sDream  
    OP
       2016-09-11 20:43:46 +08:00
    @Satan4869

    具体请看: https://github.com/7sDream/rikka/blob/master/README.zh.md#特点 后面的注释

    前端也是用的 Rikka 的 API 的, JS 代码都在 server/webserver/static/js 里,因为我确实前端没怎么学,如果您能把他改写成兼容大多数浏览器的话,感激不尽!
    isCyan
        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 )但是统一起来……
    isCyan
        25
    isCyan  
       2016-09-11 21:01:12 +08:00
    @7sDream 日语罗马音 ra 行还有 tsu 还有 fu 之类的都是不符合中文拼音的,而且他们的 u 并不是 wu ,日语就这样。。
    7sDream
        26
    7sDream  
    OP
       2016-09-11 21:03:36 +08:00
    @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 左右。
    7sDream
        27
    7sDream  
    OP
       2016-09-11 21:05:12 +08:00
    @isCyan

    恩呢,很明显 Rikka 这个名字就是来源于六花嘛: Takanashi Rikka ,连首页图片都是她惹~

    https://zh.moegirl.org/zh/%E5%B0%8F%E9%B8%9F%E6%B8%B8%E5%85%AD%E8%8A%B1
    isCyan
        28
    isCyan  
       2016-09-11 21:06:58 +08:00
    @7sDream 我刚学日语,不怎么看动漫,欸,估计以后要入坑了
    isCyan
        29
    isCyan  
       2016-09-11 21:08:46 +08:00
    @7sDream 我觉得 HTTPS 还是由 NGINX 之类的负责比较好……
    7sDream
        30
    7sDream  
    OP
       2016-09-11 21:11:50 +08:00
    @isCyan

    那就加个参数开关好了,不想上 NGINX 的就用这个自带的。不过话说这是个人图床,作为七牛云或者又拍云的前端,其实也不会有什么巨大的访问量,倒也不用上 NGINX 之类的,我个人其实都基本用 CLI 上传的说~

    嘿,然而我虽然看动漫但是日语完全不会呀……感觉也要去学点日语才行~
    diefishfish
        31
    diefishfish  
       2016-09-11 22:52:22 +08:00 via Android
    如果想批量上传肿么办
    7sDream
        32
    7sDream  
    OP
       2016-09-11 22:56:13 +08:00
    @diefishfish

    目前计划 API 不接受批量上传。

    但是 Rikkac CLI 之后应该会支持批量上传的~

    已加入 TODO List :

    http://odbw8jckg.bkt.clouddn.com/7cb2b7ef-c44d-4acc-8ff9-115647848b11.png
    hanmiao
        33
    hanmiao  
       2016-09-12 01:32:02 +08:00
    支持
    7sDream
        34
    7sDream  
    OP
       2016-09-12 08:14:47 +08:00
    @hanmiao

    蟹蟹!😽
    chocotan
        35
    chocotan  
       2016-09-12 10:03:02 +08:00
    @jeremaihloo 这是日文罗马音
    w7938940
        36
    w7938940  
       2016-09-12 10:12:57 +08:00
    http://yotuku.cn/ 这个七牛的也不错
    7sDream
        37
    7sDream  
    OP
       2016-09-12 10:15:57 +08:00
    @w7938940

    是的,看起来也不错 OvO

    但是就是因为对这种公共的站点有点恐惧所以才自己写开源并且方便个人搭建的来着……
    ljcarsenal
        38
    ljcarsenal  
       2016-09-12 14:31:06 +08:00
    golang 不好找工作啊
    7sDream
        39
    7sDream  
    OP
       2016-09-12 14:54:06 +08:00 via iPhone
    @ljcarsenal

    没事 也不是为了找工作呀 只是最近感兴趣所以学学 golang 同理还有更不好找工作的 Rust 和 Haskell … 我都跑去学了一下…
    majinjing3
        40
    majinjing3  
       2016-09-12 14:57:38 +08:00
    @7sDream 我这边有个需要,同时直接多个源的上传,比如微博, FS ,七牛,三个源都上传,每个图片有唯一的 id ,通过 api 获取所有源的地址,当然也可以直接根据 id 获取对应源的地址,或者直接加载,这样可以首先加载微博,然后再是 FS ,七牛,(省流量嘛。。。。
    7sDream
        41
    7sDream  
    OP
       2016-09-12 15:15:58 +08:00
    @majinjing3

    恩,虽然目前的架构师单插件模式, ID 由插件负责生成,但是我想了一下改成同时多插件模式也并没有太大的难度,所以直接多个源上传如果需要是可以写的。

    但是后面这个

    「或者直接加载,这样可以首先加载微博,然后再是 FS ,七牛,(省流量嘛。。。。」

    这一段是要干啥我没太看懂……是说预览页面的加载么?
    douyang
        42
    douyang  
       2016-09-12 16:13:30 +08:00
    7sDream
        43
    7sDream  
    OP
       2016-09-12 16:38:18 +08:00
    @douyang

    这线路图有点恐怖……
    majinjing3
        44
    majinjing3  
       2016-09-12 16:39:08 +08:00 via Android
    @7sDream 后面这段是写给应用层自己处理的哈,只有有 api 可以调用就好了
    7sDream
        45
    7sDream  
    OP
       2016-09-12 16:42:15 +08:00
    @majinjing3

    那就懂了~~

    我考虑一下吧,这个还是需要改插件架构和一些返回的 JSON 格式……
    majinjing3
        46
    majinjing3  
       2016-09-12 18:36:46 +08:00 via Android
    @7sDream 纯个人需求,小网站,图片较多,又不想花太多钱在存储上面,多几个源,做冗余,加载图片的时候,网页端检查可用性,就好了,
    另外,如果有时间,我也可以帮忙写写代码,也一直在关注 golang
    Arnie97
        47
    Arnie97  
       2016-09-13 00:00:48 +08:00 via Android
    客户端应该叫 Yuuta ,哈哈哈
    7sDream
        48
    7sDream  
    OP
       2016-09-13 00:24:11 +08:00 via iPhone
    @Arnie97 是的呀卧槽!我咋给忘了捏…其实我之前想的是下一个项目叫 yuuta 的来着…但是客户端叫 yuuta 的话会有一种奇妙的有趣的意味呢~嘿咻
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2589 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 05:25 · PVG 13:25 · LAX 21:25 · JFK 00:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.