七牛的fetch一直返回401 Unauthorized,请帮忙看看access_token写错了吗?

代码如下,请帮忙看看哪里错了吗?

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就可以了

阅读 6k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进