今天想设置又拍云,看了: 《李华顺:在 Rails 项目里面使用又拍云用于存储上传图片》 及 huacnlee / _form.html.erb Railscasts:#383 Uploading to Amazon S3 《Terry Tai:#009 File uploading by Carrierwave》 《又拍云 API 文档:表单 API 接口》
还是有点晕晕的……
是有两种方式么?一种先存到我自己的服务器,再转过去又拍云;另一种是直接上传到又拍云? 那@huacnlee 针对的是第一种情况么?
两种情况下各有什么利弊? 我目前得到的结论是:先我方服务器再又拍服务器稳妥,但耗费资源;用户上传直接传到又拍云服务器速度快省事,但要备份才够安全,而且目前该服务不够稳定……
如果用第二种(表单上传),如何操作? 这有篇《ruby 又拍云上传图片 (form_api)》
用表单上传的思路是怎样的?以下是我的推测和疑问,对吗?
呼唤@upyun
两种方式都尝试过,根据自己的经验简单说说个人的理解吧
问题一
两种情况下各有什么利弊? 我目前得到的结论是:先我方服务器再又拍服务器稳妥,但耗费资源;用户上传直接传到又拍云服务器速度快省事,但要备份才够安全,而且目前该服务不够稳定……
先到我方服务器再到又拍的话对性能影要求比较高,磁盘,网络。如果你的服务器在国外的话,相当于照片先到国外,再传回国内,会比较慢,慎重。另外如果你的数据库服务器和 web 服务器为同一台的话,在高访问量时进行大量照片上传会影响数据库性能。
直接上传到又拍速度会比较快,国内用户上传体验好很多,且不容易出现 IO 瓶颈。但是偶尔会出现上传失败的情况。估计是服务还不是足够的稳定。
问题二
如果用第二种(表单上传),如何操作?
上传照片的页面,你生成照片上传表单的时候会先算出一个token 然后表单直接提交到又拍的服务器,上传成功后会根据你设置的回调规则通知你。
@chairy11 github 地址贴给你,https://github.com/wikimo/ruby-form-for-upyun,急的话,可以直接拿去用,基本调通了。test.rb 是测试文件
#2 楼 @loveky #12 楼 @wikimo 我自己在凑代码。 参照的是 huacnlee / _form.html.erb 问题是,那个 return-url 和 notify-url 怎么设呢?还是没想明白。 上传图片后,我应该会跳转到 show 页吧?之前在 new 页上传的嘛。 但又拍云有没有上传成功,我怎么知道,怎么处理呢?不成功的话,怎样通知用户?它不能直接来个 FLASH 通知的吧?
还有存储地址,因为是多态,所以我希望放在很多层次的文件夹下,这时候应该先改 opts[:prefix] 为我的目标文件夹,然后"save-key"后半部分设置我的文件名呗。我想要文件名的规则是它对应的 id,这时直接写#{id}貌似不行的吧,因为我其它内容还没填进 model,(Product.new,要填比如,产品名、产品描述、产品图片),而我产品名、产品描述都还没有填进 Product 对应 Model,id 还没生出来呢……
哎呀,好乱,你们怎么想的?
@chairy11 恩,体重管理与健康咨询,打工练级状态。不通过 return-url,notify-url 也可以的,如果不设置,默认返回上传成功后的 json 对象,解析该 json 对象即可。文件名,根据自己的需求组装即可。