新手问题 关于七牛云的一些科普性问题

somejump · March 11, 2015 · Last by est replied at March 12, 2015 · 5041 hits

1.现在我了解的七牛云通过 ROR 上传文件的方式有两个 GEM: 一个是 carrrierwave-qiniu 一个是 qiniu 这两个是什么关系?为什么需要填写两次 AK/SK? 2.carrrierwave-qiniu 可以很流畅地运作,但是当我使用传统的表单上传方法时,总是 bad token 或者是"token not specified",token 应该是没问题,但是总是报上述错。有人使用表单成功过么?

谢谢

qiniu 是 七牛的 ruby sdk carrrierwave-qiniu 是 carrierwave 对七牛支持的实现

1.carrierwave-qiniu 是对 carrierwave 的扩展,只是把上传文件的存储地址换成了七牛的云存储,用起来跟 carrierwave 差不多。 qiniu 是对七牛 api 的封装,其他该干得事情还是要自己做。 两个之间没关系。所以你两个都用要填两次 key。

2.之前@miclle 写过一个

https://ruby-china.org/topics/20691

我写过,传统表单上传的时候,应该要用七牛基于 Plupload 封装的一个 js 插件吧,报你这个错误,我认为是因为 uptoken_url 这个没写正确。这个 url 是由你的服务器来提供一个 token 的,至于 token 的生成方式就由你说的 qiniu 的 Gem 来生成。

简单的写下,类似这种

def image_token
  put_policy = Qiniu::Auth::PutPolicy.new(
    '你的存储空间名',     # 存储空间
    #key,        # 最终资源名,可省略,即缺省为“创建”语义
    #expires_in, # 相对有效期,可省略,缺省为3600秒后 uptoken 过期
    #deadline    # 绝对有效期,可省略,指明 uptoken 过期期限(绝对值),通常用于调试
  )

  uptoken = Qiniu::Auth.generate_uptoken(put_policy)
  render json: { uptoken: uptoken }
end

#2 楼 @xmonkeycn 没想到还会有这么具有教育意义的 demo,正想学 jq-file-upload 呢

#3 楼 @MrPasserby 我确实是这么写得,只不过没有渲染 json

# 在 imagecontroller 里面
 def new
    bucket = "myqiniuscope"
    put_policy = Qiniu::Auth::PutPolicy.new(
      bucket
      )
    uptoken = Qiniu::Auth.generate_uptoken(put_policy)
  end

之后在 view 的相应页面使用表单上传,报了上面的“bad token”。。。。。我再好好想想吧

#5 楼 @somejump 你 action 里面返回的是 json 么?

#6 楼 @MrPasserby 我新手。。。。不太明白 action 是什么意思?actioncontroller?但是在 views 里面的相应页面里#{uptoken}这个字符串输出就是 AK:blabla:blabla,不是 json 形式,而且我也是直接写了

input type="hidden" name="token" value="#{uptoken}"

作为上传的方法

#7 楼 @somejump 你把 view 页面删掉, 在 uptoken = Qiniu::Auth.generate_uptoken(put_policy) 下面加上 render json: { uptoken: uptoken } 试试

#8 楼 @MrPasserby

{"uptoken":"AK:BLABLA=:eyJzY29wZSI6Im1vc2l0ZSIsImRlYWRsaW5lIjoxNDI2MDY4MDEyfQ=="}

我照做后使用 new 方法,出现了一个页面,只有上面的 json 我怎么才能利用上这个 json 页面呢?

#9 楼 @somejump 我看你是图片上传,所以用七牛这个封装过的 Plupload https://github.com/qiniu/js-sdk/releases

七牛文档可以看看http://developer.qiniu.com/docs/v6/sdk/javascript-sdk.html 这里,里面有个参数是填写 uptoken_url,就是你得到 uptoken 的这个 url。 可以先研究下这个文档。

#10 楼 @MrPasserby 好的,一直在看 ruby 的,没想到 js 这块还要设置

我厂用的是阿里云的 OSS,我写了个 curl 的 hack。异步无阻塞哦。

You need to Sign in before reply, if you don't have an account, please Sign up first.