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 を使用していない理由の 1 つは、非サーバー側の画像アップロードでそれをどのように、またはなぜ使用するかについて、ドキュメントにほとんど (ない?) 指示がないためです。また、画像やその他の属性に form_for を使用していますが、それが問題になる可能性はありますか? フォームは次のようになります。

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

どんな助けでも大歓迎です。私はこのことにかなり慣れていないので、見逃した単純なものである可能性があります。ただし、コンソールにエラーはなく、JS ファイルが正しく読み込まれているように見えることは言うまでもありません。

4

2 に答える 2

2

cloudinary_gem サンプル フォルダーにあるフォト アルバムのサンプル プロジェクトは、Cloudinary を CarrierWave と統合して直接アップロードとサーバー経由のアップロードの両方に使用する方法の例を示しています。

表示されている戻り値は、適切に構造化されています。これは、プリロードされたファイル URI が Cloudinary から返される方法です。CarrierWave を使用したくない場合でも、 PreloadedFile を使用できます。Cloudinary から受け取ったものをのコンストラクターにフィードすると、返された署名を使用してアップロードを検証し (「 」を参照)、その値を にフィードできるものに変換できるようにする(「 」を参照)PreloadedFileという 2 つの目的を果たすことができます。valid?cl_image_tagidentifier

返された完全な URI を保持し、それを使用するときに翻訳するか、翻訳された値を DB に保存することができます。

于 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 に答える