ruby 又拍云上传图片(form_api)

1.所用到的插件

#cdn
gem 'carrierwave'
gem 'rest-client'
gem 'carrierwave-upyun'

 

 

2.在config/initializers文件夹下添加carrierwave.rb文件,内容:

CarrierWave.configure do |config|
    config.storage = :upyun
    config.upyun_username = "账户名"
    config.upyun_password = "密码"
    config.upyun_bucket = "空间名"
    config.upyun_bucket_domain = "空间访问地址"
end

 

3.新写model: upload.rb

#encoding: utf-8
class Upload
  BUCKET = "空间名"
  attr_accessor :save_key, :allow_exts, :content_length_range, :return_url, :notify_url, :unsharp, :quality, :password
  
  def initialize( opt )
     self.save_key = [opt[:prefix], Time.now.strftime("%y%m%d%I%M%S") +'size'+rand(10000).to_s+ "{.suffix}"].join("/") #文件存放的地址
     self.allow_exts = opt[:allow_exts]||"jpg,jpeg,gif,png"  #文件类型
     self.content_length_range = "0,#{200.kilobyte.to_i}"  #大小
     self.return_url = opt[:return_url]                                  #回调地址
     self.notify_url = opt[:notify_url]                                    #回调地址
     self.unsharp = opt[:unsharp]||false  
     self.quality = (opt[:quality] || 95 ).to_i 
  end
  
  def expiration
    Time.now.to_i + 600
  end
  
  def password
      "nBD/sdfssdEkDc="  #form_api又拍云外获取的验证密钥
  end
  
  def policy
    Base64.strict_encode64( policy_json )
  end
  
  def policy_json
     policies = {
      "bucket" => BUCKET,
      "expiration" => self.expiration,
      "save-key" => self.save_key,
      "return-url" => self.return_url
    }
    policies.to_json
  end
  
  def signature
    Digest::MD5.hexdigest("#{self.policy}&#{self.password}")
  end
  
end

4.上面的form_api(从又拍云处获取到的验证密匙):

 

 

 

5.help层添加一个方法:

 

#上传图片所有参数
def upyun_form_input_tag(opts = {})  
   upload=Upload.new( opts )
   return [ tag(:input, :type => :hidden, :name => "policy", :value => upload.policy),
                tag(:input, :type => :hidden, :name => "signature",:value => upload.signature)].join("\n").html_safe
end

 

  

6.html文件中写法:

<%=form_tag "http://v0.api.upyun.com/空间名/", :method=>:post, :multipart =>true do%>
   <%=upyun_form_input_tag( {:prefix=>"/zy_fenxiangs", :notify_url=>upload_picture_index_url} )%>
   <input type="file" class="btn_up_f" name="file"   />
   <%=submit_tag "提交"%>
<%end%>

 

7.controller层:

def upload
   params[:code]  #HTTP状态码
   params[:message]  #返回代码
   params[:url]  #图片地址
end

 

你可能感兴趣的:(Ruby)