如何使用 github repo 作为 CDN 服务器上传资产文件?

How to use github repo as like CDN server for uploading assets file?

我正在 rails 学习 ruby。我正在开发 rails 5 应用程序。 我不想使用 amazon s3 服务来包含我的资产文件。 我想使用 github 来像 CDN 一样提供我的资产文件。

但是我遇到了一个问题,我有动态文件和图片上传系统。 因此,当我上传我的文件和图像时,所有文件和图像都将上传到 github 存储库(假设,我有一个名为 busket 的 git 存储库;所以,所有图片和文件将从我的服务器上传到 busket 存储库,并将提供来自 rails 应用程序的所有资产。

那么,我怎样才能使 github 像 CDN 一样?请帮我解决这个问题。

我觉得将图像和一般类型的内容文件上传到 GitHub 以进行长期存储通常不是一个好主意。 GitHub 旨在成为 Git 的存储库提供程序,而不是作为 NoSQL 或其他类型的数据存储。更新 GitHub 中的文件需要提交到特定分支。因此,每次更改图像文件时,都需要重新提交。这不会扩展,因为 Git 不能很好地处理二进制文件。

因此,如果您的图像和内容文件需要长期数据存储,我建议您研究专为此设计的工具,例如亚马逊的 S3、Google 云存储,以及类似于这个。

1.) 将图像编码为base 64 参考:http://ruby-doc.org/stdlib-2.2.0/libdoc/base64/rdoc/Base64.html

2.) API 调用 github

参考:https://developer.github.com/v3/repos/contents/#create-a-file

这将上传 return 您在 github 内存储的图像 url,并将其存储在您的数据库中。

虽然您表示不想使用 S3,但回形针 gem 使它变得非常精简。

如@Tim 所述,这通常是个坏主意。 但是,如果您仍想使用 Git 作为文件服务器,请附加

?raw=true

在 URI 的末尾。 例如

https://github.com/git/git/blob/master/ewah/bitmap.c?raw=true

会给你文件的内容。

https://cdn.jsdelivr.net/gh/username/repository@master/file

username = github
的用户名 存储库 = github 存储库
的名称 file = 文件的实际名称