QA@IT

IE8,IE9でrailsのfile_field_tag が有効に機能しない

2932 PV

環境:
Rails 3.2.12
Ruby 1.9.3

ruby on rails を使い、file_field_tagを使ってファイルをアップロードする機能を実装しようとしており、以下のように実装しました。

Controller

class GamenController < ApplicationController
  def index
  end

  def upload_file
    file = params[:file_image].tempfile
    file_path = "/upload/sample.jpg"
    file_name = "public/upload/sample.jpg"
    File.open(file_name, "wb"){|f| f.write(file.read)}
  end
end

view

<%= form_tag({:action => 'upload_file'}, {:multipart => true}) do %>
<%= file_field_tag :file_image, :accept => 'image/jpeg, image/jpg' %>
<%= submit_tag "Upload"%>
<%end%>

※他、遷移先のViewやroute.rbがありますが省略

このように実装したところ、chromeやIE10では期待通り動いてくれていますが、
IE8,IE9で動きません。
エラーの内容は
params[:file_image]に値が渡せていないため、tempfileが未定義とされてしまいます。

...以前、画像アップロードに関しては類似の質問をこちらでさせていただき、
その際はremotipartというGemを使えばよい、とのアドバイスをいただきました。
こちらもchrome、safariでは問題ないのですが、IEとはどうも相性がよろしくないようで
うまく動きませんでした。
また、機能の構成上、modelにひもづけてアップするような仕組みが使いにくいため
他のCarriwaveやPaperClipなどのGemも使えません

申し訳ありませんが上記問題の解決法をご存じの方いらっしゃいましたら、
ご教授をお願いいたします。

宜しくお願いします。

回答

未検証で申し訳ないのですが、accept 属性が原因かもしれません。

IE のいくつかのバージョンでは JPEG の Content-Type を image/pjpeg として送信するので (ちなみに PNG も image/x-png になる)、それが accept 属性に指定された image/jpeg,image/jpg に一致せず、送信されていない可能性があります。

accept 属性に image/pjpeg を追加するか、accept 属性を削除して試してみてはいかがでしょうか。

編集 履歴 (0)
  • labochoさん
    ご教授いただき、ありがとうございます。
    image/pjpeg,image/x-png を追加してみましたが、ダメでした。
    accept属性の削除についてはまだ試していないので明日確認してみます。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。