1.现在我了解的七牛云通过 ROR 上传文件的方式有两个 GEM: 一个是 carrrierwave-qiniu 一个是 qiniu 这两个是什么关系?为什么需要填写两次 AK/SK? 2.carrrierwave-qiniu 可以很流畅地运作,但是当我使用传统的表单上传方法时,总是 bad token 或者是"token not specified",token 应该是没问题,但是总是报上述错。有人使用表单成功过么?
谢谢
1.carrierwave-qiniu 是对 carrierwave 的扩展,只是把上传文件的存储地址换成了七牛的云存储,用起来跟 carrierwave 差不多。 qiniu 是对七牛 api 的封装,其他该干得事情还是要自己做。 两个之间没关系。所以你两个都用要填两次 key。
2.之前@miclle 写过一个
我写过,传统表单上传的时候,应该要用七牛基于 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
#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”。。。。。我再好好想想吧
#6 楼 @MrPasserby 我新手。。。。不太明白 action 是什么意思?actioncontroller?但是在 views 里面的相应页面里#{uptoken}这个字符串输出就是 AK:blabla:blabla,不是 json 形式,而且我也是直接写了
input type="hidden" name="token" value="#{uptoken}"
作为上传的方法
{"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。 可以先研究下这个文档。