【问题标题】:Cloudinary jquery upload is not saving image_id correctlyCloudinary jquery 上传未正确保存 image_id
【发布时间】:2013-11-21 02:51:10
【问题描述】:

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

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

【问题讨论】:

    标签: javascript jquery ruby-on-rails cloudinary


    【解决方案1】:

    cloudinary_gem 示例文件夹中的 photo album 示例项目显示了如何使用 Cloudinary 与 CarrierWave 集成进行直接上传和通过服务器上传的示例。

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

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

    【讨论】:

      【解决方案2】:

      这就是你应该如何保存你的模型。为了正确使用 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-24
        • 2015-05-25
        • 2017-03-12
        • 2016-08-02
        • 2016-12-22
        • 2014-10-21
        • 2017-03-08
        • 2013-10-20
        相关资源
        最近更新 更多