问题一:
今天想设置又拍云,看了:
《李华顺:在 Rails 项目里面使用又拍云用于存储上传图片》
huacnlee / _form.html.erb
《Terry Tai:#009 File uploading by Carrierwave》
还是有点晕晕的……
是有两种方式么?一种先存到我自己的服务器,再转过去又拍云;另一种是直接上传到又拍云?
那@huacnlee 针对的是第一种情况么?
两种情况下各有什么利弊?
我目前得到的结论是:先我方服务器再又拍服务器稳妥,但耗费资源;用户上传直接传到又拍云服务器速度快省事,但要备份才够安全,而且目前该服务不够稳定……
问题二:
如果用第二种(表单上传),如何操作?
这有篇《ruby 又拍云上传图片(form_api)》
用表单上传的思路是怎样的?以下是我的推测和疑问,对吗?
1. 用户上传图片,post表单
2. 表单的内容分成两部分,一部分去了我方服务器,另一部分(图片)去了又拍云。
3. 我的controller处理完表单,各attr入各model,这时候我图片也会在对应image的model增加数据,比如存储地址和对应的对象id和Type。
这时候,是因为我设置了图片会存入又拍云的哪个位置,文件名设置成怎样(可以设置的吧?),所以我image model可以直接填写存储地址。
但我怎么知道到底存成功没有呢?是要等又拍云这时候又给我服务器一个反馈,我的image相关信息才save吗?这个反馈是怎样获得和处理的?
注:原帖发于:RubyChina
使用表单上传API可以节省自己的服务器带宽,且能获得CDN的上传加速效果。
如果使用表单上传API,是需要分成两个部分,其中一个是单独上传文件用。
在使用表单上传API时,可以设定指定的文件路径,具体可参考UPYUN的表单API文档说明。
比如设定的存储路径: /#custom-id#/{random}{.suffix}
该次表单上传设定的 custom-id 为abc,即 /abc/{random}{.suffix}
用户上传 a.jpg
指用户上传的文件会存到 /abc/b8423187c75e6c7f.jpg (注: b8423187c75e6c7f 是UPYUN随机生成)
用户上传完成后,UPYUN会有回调通知。
通知方式有两种,一种是异步回调 notify-url 用来通知你的服务器。另外一种是同步转向的回调 return-url,可使得浏览器跳转到指定的URL
具体可按业务需求来选择 :)