新手问题 有没有又拍云表单 API 详细教程啊?

chairy11 · 2014年05月01日 · 最后由 moioo 回复于 2014年05月08日 · 6254 次阅读

问题一:

今天想设置又拍云,看了: 《李华顺:在 Rails 项目里面使用又拍云用于存储上传图片》 huacnlee / _form.html.erb Railscasts:#383 Uploading to Amazon S3 《Terry Tai:#009 File uploading by Carrierwave》 《又拍云 API 文档:表单 API 接口》

还是有点晕晕的……

是有两种方式么?一种先存到我自己的服务器,再转过去又拍云;另一种是直接上传到又拍云? 那@huacnlee 针对的是第一种情况么?

两种情况下各有什么利弊? 我目前得到的结论是:先我方服务器再又拍服务器稳妥,但耗费资源;用户上传直接传到又拍云服务器速度快省事,但要备份才够安全,而且目前该服务不够稳定……

问题二:

如果用第二种(表单上传),如何操作? 这有篇《ruby 又拍云上传图片 (form_api)》

用表单上传的思路是怎样的?以下是我的推测和疑问,对吗?

  1. 用户上传图片,post 表单
  2. 表单的内容分成两部分,一部分去了我方服务器,另一部分(图片)去了又拍云。
  3. 我的 controller 处理完表单,各 attr 入各 model,这时候我图片也会在对应 image 的 model 增加数据,比如存储地址和对应的对象 id 和 Type。 这时候,是因为我设置了图片会存入又拍云的哪个位置,文件名设置成怎样(可以设置的吧?),所以我 image model 可以直接填写存储地址。 但我怎么知道到底存成功没有呢?是要等又拍云这时候又给我服务器一个反馈,我的 image 相关信息才 save 吗?这个反馈是怎样获得和处理的?

呼唤@upyun

1 如你所说 2 直接传又拍,完了之后通知你的服务器,然后该干啥干啥

@huacnlee 主要是第一种,传统方式,当然他也提到了第二种,实现了基本方案

两种方式都尝试过,根据自己的经验简单说说个人的理解吧

问题一

两种情况下各有什么利弊? 我目前得到的结论是:先我方服务器再又拍服务器稳妥,但耗费资源;用户上传直接传到又拍云服务器速度快省事,但要备份才够安全,而且目前该服务不够稳定……

先到我方服务器再到又拍的话对性能影要求比较高,磁盘,网络。如果你的服务器在国外的话,相当于照片先到国外,再传回国内,会比较慢,慎重。另外如果你的数据库服务器和 web 服务器为同一台的话,在高访问量时进行大量照片上传会影响数据库性能。

直接上传到又拍速度会比较快,国内用户上传体验好很多,且不容易出现 IO 瓶颈。但是偶尔会出现上传失败的情况。估计是服务还不是足够的稳定。

问题二

如果用第二种(表单上传),如何操作?

上传照片的页面,你生成照片上传表单的时候会先算出一个token 然后表单直接提交到又拍的服务器,上传成功后会根据你设置的回调规则通知你。

最近正在写这个 gem,还没写好,写完后,分享给你 @chairy11

#4 楼 @wikimo 这个靠谱,我正要写这个功能呢,你大概啥时候写出来?我是等你呢,还是等你呢,还是等你呢:D 哈哈哈哈……

#5 楼 @chairy11 为什么不是你自己写一个出来分享个大家 ...

#6 楼 @bhuztez 你明知我没这水平……

#8 楼 @bhuztez 就知道你会这么说!

@chairy11 github 地址贴给你,https://github.com/wikimo/ruby-form-for-upyun,急的话,可以直接拿去用,基本调通了。test.rb 是测试文件

#10 楼 @wikimo 我这边显示 404 哦!还是等你完善点好,要不遇到莫名其妙的问题我搞不定的哦!

@chairy11 改过了,最近应该会抽时间完善下。

#12 楼 @wikimo 弱弱地说,光看这个 Usage 我还不懂怎么用……

#12 楼 @wikimo 你是在减肥行业创业么?

#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 还没生出来呢……

哎呀,好乱,你们怎么想的?

#15 楼 @chairy11 你那么多书是白看的么

#16 楼 @bhuztez 白得不能再白……脑袋空空的……我再也不看书了!

#17 楼 @chairy11 那赶紧把现在这问题解决了

@chairy11 恩,体重管理与健康咨询,打工练级状态。不通过 return-url,notify-url 也可以的,如果不设置,默认返回上传成功后的 json 对象,解析该 json 对象即可。文件名,根据自己的需求组装即可。

#19 楼 @wikimo 发个网站来看看? 什么叫体重管理与健康咨询?我有个朋友,说他的梦想之一是开个减肥俱乐部,我还想着要不哪天帮他做个类似的网站呢,不过平时都没有留意这一块…… 你们是线上的还是线下的项目?

iyoo.me,最近业务调整中,之前做集团用户,现在针对个人用户,线上线下都有…… @chairy11

#22 楼 @wikimo 谢谢,我之前自己弄的还没完全跑起来……我看看是继续我的,还是直接用你的……

最近修改了 ueditor 的源代码,支持直传 upyun

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