漢字ファイルのダウンロード

漢字ファイルのダウンロードでエラーになる部分は、redmineを参考にしてみた。
application.rbのメソッド

  def filename_for_content_disposition(name)
    request.env['HTTP_USER_AGENT'] =~ %r{MSIE} ? ERB::Util.url_encode(name) : name
  end

HTML素人なので、全部調べた。
"request"はブラウザが送ってきたオブジェクト。
"env['HTTP_USER_AGENT']"は、ブラウザの情報が入ってる。
"=~ %r{MSIE}"は、正規表現のマッチング。
ここまでで、"ブラウザがIEか?"ってことらしい。
IE7は次の情報を送ってくる。

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)

で、"ERB::Util.url_encode(name)"の部分は、URLエンコードってやつで、
%付きの文字列にしてくれる。これで漢字の部分は"%E6%BC%A2%E5…"に変換される。
これでファイルへの保存とsend_fileに引き渡すときに変換してやる。
こんな感じ。

  def create
    upload = params[:doc]
    path = "/files/" + filename_for_content_disposition(upload['file'].original_filename)
    File.open( path, "wb") { |f| f.write( upload['file'].read ) }

    Document.create( :filename=>upload['file'].original_filename )
  end

  def download
    document = Document.find(params[:id])
    path = "/files/" + filename_for_content_disposition(document.filename)
    send_file(path)
  end

いくつか問題あり。
・ファイルの保存ダイアログの確認表示でファイル名に空白があると%20となる。
・実際に保存されたファイル名は%付きなので何が何だかわからない。
一応、うまくいった。
これで思ったのは、IE以外も試さないといけないということ。
FireFoxとかで試してみるか。