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

用 golang 撸了个文件中转服务

  •  1
     
  •   freestyle ·
    hanjm · 2017-02-09 23:15:18 +08:00 · 3833 次点击
    这是一个创建于 2633 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用于放 VPS 上中转文件, go 单文件, 部署无第三方依赖. 用 curl -IL 仅获取 Header 得到下载文件长度, 调用 wget 下载, 前端页面计算实现进度环, 这个进度环弄了挺久.

    若配合 kcptun( https://www.v2ex.com/t/297296 https://github.com/xtaci/kcptun), 拖回本地的速度可以飞起来

    Demo http://23.83.230.242/file_download_proxy/

    Source https://github.com/hanjm/file_download_proxy

    http://ww1.sinaimg.cn/large/cfe1407cgy1fckgltj5vrj21dl0g2wh1.jpg

    第 1 条附言  ·  2017-02-10 09:45:43 +08:00
    v2exer 发现了可以 xss 忘记转义了 受教
    第 2 条附言  ·  2017-02-10 09:52:46 +08:00
    replace("</", "<\\/")
    第 3 条附言  ·  2017-02-10 13:46:24 +08:00
    由于有 cache, 用户下载时文件被删除没有影响的
    第 4 条附言  ·  2017-02-12 09:52:03 +08:00
    update:支持磁力链接(via aria2 jsonrpc interface)
    第 5 条附言  ·  2017-03-18 00:02:57 +08:00
    2017-03-17 更新,使用 websocket 实现仅当有任务在下载时推送文件状态更新,代替原来消耗过大的 ajax 轮询.
    第 6 条附言  ·  2017-03-18 00:08:53 +08:00
    由于使用了 websocket 依赖包 github.com/gorilla/websocket
    第 7 条附言  ·  2017-03-22 21:15:38 +08:00
    2017-03 改进: 文件下载函数复用 Goroutines,代替原来的直接 go func 使用 http.Client 代替 curl wget (笑 cry
    44 条回复    2017-03-18 00:03:58 +08:00
    freestyle
        1
    freestyle  
    OP
       2017-02-09 23:15:51 +08:00
    图挂了?
    freestyle
        2
    freestyle  
    OP
       2017-02-10 00:15:10 +08:00
    服务器收到一大堆大文件 TestFile,然后塞满了.....
    v2ex 真厉害

    2017/02/09 10:58:30 Download: length:9.77 GB source:http://speed.hetzner.de/10GB.bin filename:10GB-1486655910.bin
    bl5c
        3
    bl5c  
       2017-02-10 00:20:14 +08:00
    不是有现成的 rapidleech
    你这个可以加个密码登录
    nfroot
        4
    nfroot  
       2017-02-10 09:02:42 +08:00
    下载 URL 无文件名的网址没有“下载地址”(下载后)

    比如你下载“ http://23.83.230.242/file_download_proxy/”这个网址试试,下载地址那一栏是空的
    hillw4h
        5
    hillw4h  
       2017-02-10 09:43:32 +08:00
    我去,被人 xss 了。
    nfroot
        6
    nfroot  
       2017-02-10 10:02:38 +08:00
    某些人也是病态,丢了一堆 10G 大小的文件的链接上去。
    relaxchen
        7
    relaxchen  
       2017-02-10 10:04:40 +08:00
    @nfroot 明显的素质问题
    weiweiwitch
        8
    weiweiwitch  
       2017-02-10 10:11:29 +08:00
    先给你加个 Star 。
    freestyle
        9
    freestyle  
    OP
       2017-02-10 10:14:44 +08:00
    @nfroot 谢谢. 发现是前端显示判断有问题
    nfroot
        10
    nfroot  
       2017-02-10 10:16:29 +08:00
    @freestyle 增加一个限制文件大小的选项吧 要不然那些病态的人会老是去尝试做一些病态的事情
    nfroot
        11
    nfroot  
       2017-02-10 10:39:58 +08:00
    其实以前还是蛮想要个这东西的,如果有 PHP 的就好了,不过调用 exe 文件实在是……
    freestyle
        12
    freestyle  
    OP
       2017-02-10 10:43:38 +08:00
    @nfroot 好 Content-Length < 3G
    freestyle
        13
    freestyle  
    OP
       2017-02-10 10:44:48 +08:00
    @nfroot 也可以让 go 去请求文件 但是要处理 30X
    vultr
        14
    vultr  
       2017-02-10 10:57:03 +08:00
    速度还真快,谢谢。下了个 freebsd
    deweixu
        15
    deweixu  
       2017-02-10 11:55:14 +08:00
    正好最近在学 go , star
    nfroot
        16
    nfroot  
       2017-02-10 11:55:22 +08:00
    @freestyle 咦,楼主你这个是搬瓦工的 FREMONT 节点啊?翻墙效果咋样,电信。
    freestyle
        17
    freestyle  
    OP
       2017-02-10 12:01:53 +08:00
    @nfroot 是的 ss 速度不快 一两百 KB/s 用 kcptun 转后就不错了,youtube 可 HD
    ptyfork
        18
    ptyfork  
       2017-02-10 12:54:55 +08:00
    xss 在哪里?
    ptyfork
        19
    ptyfork  
       2017-02-10 12:57:42 +08:00
    不支持磁链啊
    iyaozhen
        20
    iyaozhen  
       2017-02-10 13:01:55 +08:00
    之前也自己搞了个 download.sh ,下载后放在 Nginx 下,开迅雷下载速度也是飞起,不过没有实现前端页面。
    yansyuei
        21
    yansyuei  
       2017-02-10 13:05:30 +08:00
    正好需要这个 thx
    yuchenr
        22
    yuchenr  
       2017-02-10 13:08:54 +08:00
    感觉要被玩坏
    yghack
        23
    yghack  
       2017-02-10 13:44:20 +08:00
    赞一个!
    nfroot
        24
    nfroot  
       2017-02-10 13:47:24 +08:00
    @freestyle 奇怪,国内一般不是推荐 LOS ANGELES 的节点么 0 0
    loading
        25
    loading  
       2017-02-10 13:57:21 +08:00 via Android
    不加密码不敢装到自己 vps ……

    楼主有考虑支持其他类型吗? bt 和磁力
    freestyle
        26
    freestyle  
    OP
       2017-02-10 14:22:38 +08:00 via iPhone
    @loading 自用的话搞个长点的 token 就行了 好,加
    yghack
        27
    yghack  
       2017-02-10 14:32:37 +08:00
    不是了一下,竟然是 404
    什么问题?
    mcfog
        28
    mcfog  
       2017-02-10 14:45:07 +08:00
    ……乞丐版 aria2 ?
    huixia0010
        29
    huixia0010  
       2017-02-10 16:38:32 +08:00
    受教了
    ptyfork
        30
    ptyfork  
       2017-02-10 16:41:27 +08:00
    磁链我觉得可以调用 transmission 来下载
    xJogger
        31
    xJogger  
       2017-02-10 17:00:52 +08:00 via Android   ❤️ 2
    @ptyfork Cloud Torrent 不错。
    ptyfork
        32
    ptyfork  
       2017-02-10 17:05:19 +08:00
    @xJogger

    大赞啊, 感谢已发送!

    Go 的库确实越来越丰富了,我以为没有 torrent 的库呢。。

    github.com/anacrolix/torrent
    freestyle
        33
    freestyle  
    OP
       2017-02-10 17:11:23 +08:00
    @xJogger 感谢,这个不错
    claysec
        34
    claysec  
       2017-02-10 17:46:53 +08:00
    现在支持 torrent 吗?
    freestyle
        35
    freestyle  
    OP
       2017-02-10 18:09:18 +08:00
    gopher://120.27.202.184:32/1.php 是什么姿势
    freestyle
        36
    freestyle  
    OP
       2017-02-10 18:16:28 +08:00
    @claysec
    不支持, 看 @xJogger 提到的 https://github.com/jpillora/cloud-torrent, 试了下, 功能非常全
    lhbc
        37
    lhbc  
       2017-02-10 18:26:15 +08:00
    这个需求,用 nginx 的反代是最合适的。
    而且,不占用服务器空间。
    dreammes
        38
    dreammes  
       2017-02-10 18:37:32 +08:00
    姿势不错哦
    nicoljiang
        39
    nicoljiang  
       2017-02-11 01:25:01 +08:00 via iPhone
    mark
    freestyle
        40
    freestyle  
    OP
       2017-02-11 10:25:51 +08:00
    @claysec
    @ptyfork
    @xJogger 用 vps 下载磁链 /torrent 可能不小心下到了受版权保护的资源, 我正测试加磁链的功能, 下了个降临, 然后第一次收到了 DCMA complaint
    xJogger
        41
    xJogger  
       2017-02-11 12:22:37 +08:00 via Android
    @freestyle 我一般在 Daocloud 提供的测试容器上用 Cloud Torrent …虽然只能挂一天,不过小资源也够用了。
    roist
        42
    roist  
       2017-02-11 19:11:47 +08:00
    Absolutely fantastic
    freestyle
        43
    freestyle  
    OP
       2017-02-12 10:00:53 +08:00 via iPhone   ❤️ 2
    @claysec
    @loading 支持磁力了
    freestyle
        44
    freestyle  
    OP
       2017-03-18 00:03:58 +08:00
    2017-03-17 更新,使用 websocket 实现仅当有任务在下载时推送文件状态更新,代替原来消耗过大的 ajax 轮询.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1711 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 16:52 · PVG 00:52 · LAX 09:52 · JFK 12:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.