class Qiniu2Upyun::Qiniu

Constants

HOST
NAME

Attributes

config[R]

Public Class Methods

new(config) click to toggle source
# File lib/qiniu2upyun/qiniu.rb, line 8
def initialize(config)
  @config = config
end

Public Instance Methods

download(key) click to toggle source
# File lib/qiniu2upyun/qiniu.rb, line 34
def download(key)
  uri = get_download_uri(key)

  Net::HTTP.start(uri.host) do |http|
    request = Net::HTTP::Get.new(uri)

    http.request(request) do |response|
      data = get_data(key, response)

      response.read_body { |chunk| data.write(chunk) }

      data.io.rewind

      return(data.io)
    end
  end
end
list(params={}) click to toggle source
# File lib/qiniu2upyun/qiniu.rb, line 16
def list(params={})
  uri = get_list_uri(params)

  Net::HTTP.start(uri.host) do |http|
    request = Net::HTTP::Post.new(uri)

    set_headers(request, uri)

    response = http.request(request)

    if response.is_a?(Net::HTTPOK)
      JSON.parse(response.body)
    else
      raise ResponseError.new(response)
    end
  end
end
name() click to toggle source
# File lib/qiniu2upyun/qiniu.rb, line 12
def name
  NAME
end

Private Instance Methods

get_access_token(uri, body=nil) click to toggle source
# File lib/qiniu2upyun/qiniu.rb, line 102
def get_access_token(uri, body=nil)
  "QBox #{get_sign("#{uri.request_uri}\n#{body}")}"
end
get_data(key, response) click to toggle source
# File lib/qiniu2upyun/qiniu.rb, line 61
def get_data(key, response)
  length = response['Content-Length'].to_i

  bar = Utils.get_bar(length, 'Download')

  if length > 1024 * 1024
    Data.new(Tempfile.new(key), bar)
  else
    Data.new(StringIO.new, bar)
  end
end
get_download_token(uri) click to toggle source
# File lib/qiniu2upyun/qiniu.rb, line 98
def get_download_token(uri)
  get_sign(uri.to_s)
end
get_download_uri(key) click to toggle source
# File lib/qiniu2upyun/qiniu.rb, line 86
def get_download_uri(key)
  url = "#{config.domain}/#{key}?e=#{Time.now.utc.to_i + 3600}"

  uri = URI(URI.encode(url))

  download_token = get_download_token(uri)

  url = url.concat("&token=#{download_token}")

  uri = URI(URI.encode(url))
end
get_list_uri(params) click to toggle source
# File lib/qiniu2upyun/qiniu.rb, line 73
def get_list_uri(params)
  default_params = { 
    bucket: config.bucket,
    limit: 100,
    marker: nil,
    prefix: nil
  }

  query = URI.encode_www_form(default_params.merge(params))

  uri = URI(URI.encode("#{HOST}/list?#{query}"))
end
get_sign(signing_str) click to toggle source
# File lib/qiniu2upyun/qiniu.rb, line 106
def get_sign(signing_str)
  digest = OpenSSL::Digest.new('sha1') 

  sign = OpenSSL::HMAC.digest(digest, config.secret_key, signing_str)

  encoding_sign = Base64.urlsafe_encode64(sign)

  "#{config.access_key}:#{encoding_sign}"
end
set_headers(request, uri) click to toggle source
# File lib/qiniu2upyun/qiniu.rb, line 54
def set_headers(request, uri)
  access_token = get_access_token(uri)

  request['Authorization'] = access_token
end