Cloudinary jquery上传不能正确保存image_id

时间:2013-11-08 23:10:56

标签: javascript jquery ruby-on-rails cloudinary

我正在使用Cloudinary和jquery直接从RoR应用程序中的浏览器上传图像。我想我已完全按照here的说明进行操作了。

图片上传工作正常,但返回的参数[:image_id]似乎在#符号后附加了签名,如下所示:

"image_1_id"=>"image/upload/v1383951287/foobar.jpg#b023156dfebede65......."}

所以最终会保存在模型上。然后,当我尝试使用:

检索图像时
<%= cl_image_tag(@model.image_1_id) %>

正如文档中所建议的那样,url不仅附加了签名,而且还复制了前面路径的一部分,如下所示:

http://res.cloudinary.com/.../image/upload/v1/image/upload/v1383951287/foobar.jpg%23b023156d...

显然这个链接不起作用,但是如果从末尾删除重复的路径和签名,它就可以工作。

我没有使用CarrierWave,部分原因是因为文档中很少(没有?)指令关于如何或为什么将它用于非服务器端图像上传。此外,我正在使用form_for作为图像和其他属性,这可能是问题吗?表格如下:

<%= form_for @model do |f| %>
...
<%= f.cl_image_upload(:image_1_id) %>
...
<% end %>

任何帮助非常感谢。我对这些东西很陌生,所以很可能是我错过了一些简单的东西。但值得一提的是,控制台中没有错误,JS文件似乎正确加载。

2 个答案:

答案 0 :(得分:2)

cloudinary_gem samples文件夹中的photo album示例项目显示了如何将Cloudinary与CarrierWave集成用于直接上传和直接上传服务器的示例。

您看到的返回值按其应有的结构。这是从Cloudinary返回预加载文件URI的方式。如果您不想使用CarrierWave,您仍然可以使用PreloadedFile。将您从Cloudinary接收的内容提供给PreloadedFile的构造函数可以实现双重目的,即允许您使用返回的签名验证上载(请参阅valid?)并将该值转换为可以馈送的内容进入cl_image_tag,(见identifier)。

您可以保留完整返回的URI并在使用时将其翻译或将翻译后的值存储到数据库中。

答案 1 :(得分:0)

这是保存模型的方法。为了正确使用cl_image_tag

if params[:image_id].present?
  preloaded = Cloudinary::PreloadedFile.new(params[:image_id])         
  raise "Invalid upload signature" if !preloaded.valid?
  @category.image_id = preloaded.identifier
end