云服务 CarrierWave 如何从云存储下载文件。

u1450154824 · 2016年04月22日 · 最后由 novtopro 回复于 2016年08月12日 · 2807 次阅读

用的阿里云 oss 和 carrierwave-aliyun,上传现在是可以。 我现在是在 model 里 mount_uploader。 试过这样

uploader = BaseUploader.new
uploader.retrieve_from_store! 'd374181822cea77fd4957aa498c1d8e3.jpg'
uploader.cache_stored_file!

报错是

The specified key does not exist

希望有经验的前辈可以帮我解决一下。 并且想知道 carrierwave 的正确使用姿势是什么样的?

怎么用的,写详细点,看不明白

这些是我的配置 @huacnlee ,因为之前用的本地存储,直接返回 url 给前端就能直接访问图片,现在用阿里云因为有权限,所以现在前端应该用什么办法怎么获取云端的文件。

class BillUploader < CarrierWave::Uploader::Base
  storage :aliyun

  def store_dir
    "#{Rails.env}/bill/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  def extension_white_list
    %w(jpg jpeg gif png)
  end

end

class Bill < ActiveRecord::Base
  mount_uploader :bill_image, BillUploader
end
ALIYUN_CONFIG = YAML.load_file("#{Rails.root}/config/aliyun.yml")[Rails.env]
CarrierWave.configure do |config|
  config.storage           = :aliyun
  config.aliyun_access_id  = ALIYUN_CONFIG['AccessKeyId']
  config.aliyun_access_key =  ALIYUN_CONFIG['AccessKeySecret']
  config.aliyun_bucket     =  ALIYUN_CONFIG['Bucket']
  config.aliyun_internal   = true
  config.aliyun_host       =  ALIYUN_CONFIG['Endpoint']
end

desc '上传图片用'
      params do
        optional :bill_number, type: String, desc: '号码'
        optional :bill_image, type: File, desc: '照片'
      end
      post do
        begin
          @bill.update!(declared(params, include_missing: false))
          return_ok @bill
        rescue => e
          return_fail e.message
        end
     end

Aliyun 上面是配置成 Public Read 的吗?

# Bucket 为私有读取请设置 true,默认 false,以便得到的 URL 是能带有 private 空间访问权限的逻辑
# config.aliyun_private_read = false

#5 楼 @huacnlee 可以了,谢谢李哥,我还没注意看到这个配置呢。不过我看了源码,没有找到生成签名的代码在哪里,想看看。gem 好用啊,真是方便。

是在另外个 Gem 里面的

需要 登录 后方可回复, 如果你还没有账号请 注册新账号