ユーザーのプロフィール画像をPostgreSQLにバイナリ形式で保存しているのですが、その取得・表示がうまくできないことがあります。
環境は次の通りです。
・ Ruby 2.3.0
・ Rails 5.0
・ AWS EC2
・ PostgreSQL
(必要な情報はその都度補足します)
以下、画像を取得する部分のコードです。
Ruby
1# hoge/index.html.erb 2 3<%= image_tag(get_profile_image(hoge.user), :class => "hoge") %>
# users_helper.rb def get_profile_image(user) if user.picture_file routes = Rails.application.routes.url_helpers path = routes.url_for(:controller => 'application', :action => 'show_image', :id => user.id,:model => "User", :column => "picture_file", :only_path => true) else # デフォルト画像 path = 'default.png' end return path end
ヘルパーでクエリを叩いて取得したデータを以下のとおり「send_data」に突っ込んでいます。
# application_controller.rb def show_image model = params[:model].constantize.find(params[:id]) send_data model[params[:column]], :type => 'image/jpg,image/jpeg,image/png,image/gif', :disposition => 'inline' end
これをブラウザで確認すると、クライアントの環境によって画像が表示されなくなることがあり、その場合はchromeやsafariではこんな感じです。
一方、FireFoxではこのような表示に切れた状態で表示されます。
詳しい要因がはっきりしないので悩んでいます。
どなたかご教示いただけますと幸いです。
よろしくお願いいたします。
【補足】
上記のerbがブラウザ側で展開された際のソースはこちらです。
(一応IDは伏せさせていただきます)
<img class="hoge" src="/show_image?column=picture_file&id=xxx&model=User" alt="Show image?column=picture file&id=xxx&model=user">
また、取得できなかった際にコンソールで下記のエラーが発生しています。
Failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING
回答1件
あなたの回答
tips
プレビュー