因为Github的直连一直断断续续的,Release的附件并不能很好的分发,所以想找一找备选方案。
方案一:参考静态资源网站部署
很多网站只需要关联一个Git项目即可运行,你只需要把要分发的东西push上传即可。
像Github Pages、Cloudflare Pages、Netlify、Vercel这些,甚至是railway都行。
但是吧,这种东西就想把Github当成图床一样,似乎是种滥用,我不是很认可。
方案二:对象存储服务
有很多对象存储服务,实际上更多的是媒体对象存储服务。
不仅仅是存储,还包括图片、视频的大小清晰度高宽预处理等等,但这些并不在我们的考虑范围之内。
我们只需要存储与分发功能就够了。
- 我们的关注点有以下几个:
- 免费:不是试用
- 不需要手机号或绑卡
- 可以通过API上传:判断的标准是,能否通过curl实现文件上传
- 可以通过分发链接在浏览器直接下载: 不是那种打开网页,然后页面里面有个下载按钮的
- 分发链接可预测: 链接内容直接和文件名关联,而不是未知的字符串。
在试用了ripienaar/free-for-dev/列举的可能的服务提供方以后,大概筛选了以下几个服务商,满足以上所有条件。
以下选取了部分GithubActions的实现,用于上传参考:
- name: Upload release to supabase
env:
SUPABASE_ANON_KEY: ${{ secrets.SUPABASE_ANON_KEY }}
run: |
curl https://vezfoeoqirnvcqsuiext.supabase.co/storage/v1/object/bili/release/BilibiliDown.v${{steps.tag_latest.outputs.value}}.release.zip \
-F "file=@BilibiliDown.v${{steps.tag_latest.outputs.value}}.release.zip" \
-F "cacheControl=3600" \
-H "apikey: $SUPABASE_ANON_KEY" \
-H "authorization: Bearer $SUPABASE_ANON_KEY"
- name: Upload release to cloudinary
env:
CLOUDINARY_API_KEY: ${{ secrets.CLOUDINARY_API_KEY }}
CLOUDINARY_API_SECRET: ${{ secrets.CLOUDINARY_API_SECRET }}
ZIP_FILE_NAME: BilibiliDown.v${{steps.tag_latest.outputs.value}}.release.zip
run: |
timeStamp=`date '+%s'`
param2sign="public_id=bili/$ZIP_FILE_NAME×tamp=$timeStamp&upload_preset=usf6ttao$CLOUDINARY_API_SECRET"
sig=$(echo -n $param2sign|sha1sum| cut -d' ' -f1)
curl https://api.cloudinary.com/v1_1/dcrcvyjzu/raw/upload \
-F "file=@$ZIP_FILE_NAME" \
-F "api_key=$CLOUDINARY_API_KEY" \
-F "public_id=bili/$ZIP_FILE_NAME" \
-F "timestamp=$timeStamp" \
-F "upload_preset=usf6ttao" \
-F "signature=$sig"
- name: Upload release to imagekit
env:
IMAGEKIT_PRIVATE_KEY: ${{ secrets.IMAGEKIT_PRIVATE_KEY }}
ZIP_FILE_NAME: BilibiliDown.v${{steps.tag_latest.outputs.value}}.release.zip
run: |
curl -X POST "https://upload.imagekit.io/api/v1/files/upload" \
-u $IMAGEKIT_PRIVATE_KEY: \
-F "file=@$ZIP_FILE_NAME;type=application/octet-stream" \
-F "useUniqueFileName=false" \
-F "folder=release" \
-F "fileName=$ZIP_FILE_NAME"
还有几个尝试过,有些条件不满足,但仍有一定价值的:
- filestack: 可以通过API上传,只能通过API返回的key来定位资源,没法自定义下载链接
- uploadcare: 可以通过API上传,但且只能上传图片、只能通过API返回的key来定位资源,没法自定义下载链接
还有几个类似于网盘的:
- sync: 百度云类似的网盘,用户未登录也能下载
- pcloud: 百度云类似的网盘,用户未登录也能下载
- borgbase: 只能通过ssh上传下载
- filestack: 免费用户无法将目录设为公共,这意味着没法分发内容
最后,分类iaas下的其余那几个就不要再试了