笔记---华为OBS存储API调用

笔记—华为OBS存储API调用

1 获取AK和SK

购买后从官网获取

2 计算鉴权签名

采用在请求头headers中携带签名的方式
Java和Python的计算方式:https://support.huaweicloud.com/api-obs/obs_04_0010.html#section1

Ruby的计算方式:

# @@UserName		桶名
# @@AccessKeyId		AK
# @@SecretAccessKey	SK	

require 'base64'
require "uri"
require "net/http"

# 构建请求头鉴权签名
def self.get_signature(method, content_type='')
    date = DateTime.now.httpdate
    canonical_string = method + "\n" + "\n" + content_type + "\n" + date + "\n" + "/"
    digest  = OpenSSL::Digest.new('sha1')
		signature = Base64.encode64(OpenSSL::HMAC.digest(digest, @@SecretAccessKey, canonical_string))
    authorization = "OBS " + @@AccessKeyId + ":" + signature.to_s.strip
    {authorization: authorization, date: date}
end

3 发送请求

3.1 获取桶列表

get请求

require "uri"
require 'rexml/document'
require 'active_support/core_ext/hash'

# 获取桶列表
url = URI("http://obs.*******.huaweihaiercloud.com/")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
signature = get_signature("GET")
request["Authorization"] = signature[:authorization]
request["Host"] = "obs.*******.huaweihaiercloud.com"
request["Date"] = signature[:date]
response = http.request(request)
data = Hash.from_xml(response.read_body)
data["ListAllMyBucketsResult"]["Buckets"]["Bucket"]

3.2 上传对象

PUT/POST请求
以PUT请求为例

require "uri"
require 'rexml/document'
require 'active_support/core_ext/hash'

@@UserName = '桶名'
# 上传对象
url = URI('http://' + @@UserName + '.obs.*******.huaweihaiercloud.com/' + '对象名')
http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Put.new(url)
signature = get_signature("PUT", file[:file_type])
request["Authorization"] = signature[:authorization]
request["Host"] = @@UserName + '.obs.*******.huaweihaiercloud.com'
request["Date"] = signature[:date]
request["Content-Type"] = file[:file_type]
request.body = file[:data]
response = http.request(request)
data = Hash.from_xml(response.read_body)
    

3.3 下载对象

require 'base64'
require "uri"
require "net/http"
require 'nokogiri'
require 'rexml/document'
require 'active_support/core_ext/hash'

@@UserName = '桶名'

# 下载文件  示例:a=HuaweiObsLib.downloadFile({:uuid=>'11111',:filename => "test.png"})
  def self.downloadFile(file)
    ext = file[:filename].split(".").last.to_s || ''
    new_filename = [file[:uuid], ext].join(".")
    url = URI('http://' + @@UserName + '.obs.*******.huaweihaiercloud.com/' + new_filename)
    http = Net::HTTP.new(url.host, url.port);
    request = Net::HTTP::Get.new(url)
    signature = get_signature("GET", "", "", '/' + @@UserName + '.obs.*******.huaweihaiercloud.com/' + new_filename)
    request["Authorization"] = signature[:authorization]
    request["Host"] = 'http://' + @@UserName + '.obs.*******.huaweihaiercloud.com/'
    request["Date"] = signature[:date]
    request["HTTP-Verb"] = "GET"
    response = http.request(request)
  end

3.4 删除对象

require 'base64'
require "uri"
require "net/http"
require 'nokogiri'
require 'rexml/document'
require 'active_support/core_ext/hash'

@@UserName = '桶名'

# 删除文件
  def self.deleteFile(file)
    ext = file[:filename].split(".").last.to_s || ''
    new_filename = [file[:uuid], ext].join(".")
    url = URI('http://' + @@UserName + '.obs.*******.huaweihaiercloud.com/' + new_filename)
    http = Net::HTTP.new(url.host, url.port);
    request = Net::HTTP::Delete.new(url)
    signature = get_signature("DELETE", "", "", '/' + @@UserName + '.obs.*******.huaweihaiercloud.com/' + new_filename)
    request["Authorization"] = signature[:authorization]
    request["Host"] = 'http://' + @@UserName + '.obs.*******.huaweihaiercloud.com/'
    request["Date"] = signature[:date]
    response = http.request(request)
  end

-…—…–.-/–…----…–/-.-…–…–…-/-…—.-…–.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值