代码如下,请帮忙看看哪里错了吗?
def qiniu_access_token(path)
signing_str = path + "\n"
sign = HMAC::SHA1.digest(signing_str, Figaro.env.qiniu_secret_key)
encoded_sign = Qiniu::Utils.urlsafe_base64_encode(sign)
"#{Figaro.env.qiniu_access_key}:#{encoded_sign}"
end
def qiniu_fetch(from, bucket, key)
to = "#{bucket}:#{key}"
encode_from = Qiniu::Utils.urlsafe_base64_encode(from)
encode_to = Qiniu::Utils.urlsafe_base64_encode(to)
path = "http://iovip.qbox.me/fetch/#{encode_from}/to/#{encode_to}"
uri = URI(path)
req = Net::HTTP::Post.new(uri)
req['Authorization'] = "QBox #{qiniu_access_token(path)}"
res = Net::HTTP.start(uri.host, uri.port) do |http|
http.request(req)
end
case res
when Net::HTTPSuccess
puts 'upload ok'
else
puts res
end
end
冒昧地请 @高唱大江东去 帮忙看看
问题解决了,更新后的代码如下
def qiniu_fetch(from, bucket, key)
encode_from = Qiniu::Utils.urlsafe_base64_encode(from)
encode_to = Qiniu::Utils.encode_entry_uri(bucket, key)
path = "http://iovip.qbox.me/fetch/#{encode_from}/to/#{encode_to}"
access_token = Qiniu::Auth.generate_acctoken(path)
uri = URI(path)
req = Net::HTTP::Post.new(uri)
req['Authorization'] = "QBox #{access_token}"
res = Net::HTTP.start(uri.host, uri.port) do |http|
http.request(req)
end
case res
when Net::HTTPSuccess
puts 'upload ok'
else
puts res
end
end
PS: 通过微信js-sdk上传的图片可以通过调用七牛的fetch接口直接保存到七牛云存储,这点很方便。
微信的下载文件媒体接口:http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=AccessTok...,把from设成这个url就可以了
很可能是path部分的处理造成的签名失败,可以看一下七牛ruby生成accesstoken的方法:
https://github.com/qiniu/ruby-sdk/blob/master/lib/qiniu/auth.rb#L209