NiceLeeのBlog 用爱发电 bilibili~

【资源】关于对象存储与网络分发

2022-10-21
nIceLee

阅读:


因为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 "[email protected]${{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&timestamp=$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下的其余那几个就不要再试了


内容
隐藏