2

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

图片上传正常,但返回的 params[: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 文件似乎正在正确加载。

4

2 回答 2

2

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

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

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

于 2013-11-16T20:46:38.897 回答
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
于 2014-05-22T18:20:50.620 回答