利用 Telegraph 的基础设施搭建一个图床

这大概是我写的最短的一篇博文

本来其实不值得一写的,不过感觉太好玩了决定还是放在自己的博客上记录一下,当时和好朋友 Keshane 一起玩的一个好玩的东西。

是这样的,Telegram 有一个服务叫——Telegraph,非常像许久之前和 Keshane 筹划准备做(但是由于各种原因买了个很好的域名之后又被鸽了)的应用,几个月前的某一天在和 Keshane 一起摸鱼的时候偶然发现这个站的图片上传接口是开放且非常简易的,简单来说,只要如下发一个 POST 请求到 https://telegra.ph/upload,然后带上一个 file 字段,名字叫 file 就好了,然后就可以得到类似如下返回:

[
    {
        "src": "/file/a672a2690e15c7d86435d.jpg"
    }
]

那图片地址就会是:https://telegra.ph/file/a672a2690e15c7d86435d.jpg 了,很容易是不是?

下一步的想法就非常自然了,因为 https://telegra.ph 在国内属于无法访问的情况,所以弄一个 Nginx 的反向代理就非常容易,我们简单包装一下(假设使用 i.nova.moe):

server {
        listen 80;
        server_name i.nova.moe;

 		location /intake {
                add_header Access-Control-Allow-Origin *;
                add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
                add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';

                if ($request_method = 'OPTIONS') {
                	return 204;
                }
                
                proxy_pass https://telegra.ph/upload;
        }
        location /{
                proxy_pass https://telegra.ph/file/;
        }
        client_max_body_size 5m;

}

非常简单,之前 POST 地址为 /upload ,新的 POST 地址为 i.nova.moe/intake,然后下一步就是封装一个看上去靠谱的 Web 前端了,这一点全栈工程师 Keshane 非常熟悉,加上提示了个 Dropzonejs,很快,就有了如下界面:

还能异步上传文件:

看,是不是像那么回事了?

小结

我们做了什么?

  • 一个图床
  • 没有审查

这么做有什么问题?

  • 没有审查,反向代理了整个 Telegraph 图床,如果被不法使用会有问题
  • 不友好,使用了别人的基础设施做自己的事情
  • 如果访客太多会导致服务器 IP 被 Telegraph rate limit
  • 文件最大大小为 8M 左右,受到 Telegraph 的限制

在测试 OK 之后我们便关闭了这个站点,但是这样真的很好玩不是嘛?


Chinese

700 字

2020-01-30 09:00 +0800

comments powered by Disqus