huacnlee / carrierwave-aliyun

阿里云 OSS Ruby 上传组件,基于 Carrierwave
https://huacnlee.com/carrierwave-aliyun/
197 stars 93 forks source link

支持通过 CDN 获取文件 #51

Closed 42thcoder closed 7 years ago

42thcoder commented 7 years ago

测试没有加, 因为之前的测试好像都跑不通呢

huacnlee commented 7 years ago

需求是什么,为何要从 CDN 下载,而不是源

42thcoder commented 7 years ago

当需要大量分发文件时( 活动海报, apk ), CDN 的流量费用大概只有 OSS 的一半.

客户端访问 CDN, CDN 回源 OSS 的方式, 可以节省不少成本.

一年有个几千块吧, 省下这个钱的开发成本几乎为零嘛

huacnlee commented 7 years ago

我感觉你这个需求单独实现就好了, CDN 是额外的 CDN 不是 OSS 吧,你只需要自己实现读取功能,下载 URL 就可以了呀

看错了,是修改的 url 函数

那么 config.aliyun_host 或者是拿到 URL 以后自行做个替换是否能解决你的问题?

huacnlee commented 7 years ago

作为公共实现,这个库应该保持简单标准的方案,CDN 是额外的配置,额外的架构,我这里增加一个 config.cdn_host 容易产生歧义,让不需要的人疑惑,尤其是容易和 config.aliyun_host 混淆

42thcoder commented 7 years ago

可以的啦~ 自己做也可以

https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Store-private-public-uploads-in-different-Cloud-Files-Containers-with-Fog

官方有类似的功能, 所以就想加上, 大家都方便啦

# app/uploaders/screenshot_uploader.rb
class ScreenshotUploader < CarrierWave::Uploader::Base
  storage :fog 

  # Configure uploads to be stored in a public Cloud Files container
  def fog_directory
    'my_public_container'
  end

  # Configure uploads to be delivered over Rackspace CDN
  def asset_host
   "c000000.cdn.rackspacecloud.com"
  end
end
huacnlee commented 7 years ago

我再看了一下 carrierwave-aliyun 你需要的东西是 config.aliyun_host 改为你的 CDN 域名就可以了

那个东西就是干你想干的事情