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

somejump · 2015年03月11日 · 最后由 est 回复于 2015年03月12日 · 4146 次阅读

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

谢谢

共收到 13 条回复

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。异步无阻塞哦。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册