Rails4で画像ファイルをupload処理をした際、ファイルネームが文字化けする
まずはじめに、私はプログラム初心者です。
環境:rails 4.1.6, ruby 2.1.3
kconvを利用してコード変換処理をしていましたが、MacOS上にvagrantを入れているローカル環境では上手く保存されず、文字化けしております。また、UTF-8環境であるため、kconvを利用せずやっても上手く行きませんでした。
vagrantは標準のUbuntuを使っています。
どう処理すれば、日本語ファイルネームを文字化けせずに保存できるのでしょうか? ちなみに、viewには日本語で正しく表示されるため、経由した後に文字化けしていると思われます。 お手数おかけしますが、ご教示のほどお願い致します。
データの流れですが、
MacBookAir(MacOS X 10.10 Yosemite) → vagrant(Ubuntu10.3+Rails4.1.6+ruby2.1.3) → Macのvagrantフォルダ
となります。
- 今回のアップロード対象ファイル名:福ノ神仙壷四郎.jpg
- 実行された後のファイル名:τªÅπâÄτÑ₧_Σ╗Öσú╖σ¢¢ΘâÄ.jpg
- 期待する格納されるべきファイル名:福ノ神仙壷四郎.jpg
- ファイルの確認方法:Macターミナル及びファインダーからの目視確認
Ruby2.1からencoding機能が実装されているようなので、ここらへんも考慮してみたいと思います。
require 'kconv'
# <中略>
def upload_process
#アップロードファイルを取得
file = params[:upfile]
#ファイルのベース名(パスを除いた部分)を取得
name = file.original_filename
#許可する拡張子を定義
perms = ['.jpg', '.jpeg', '.gif', '.png']
if !perms.include?(File.extname(name).downcase)
result = 'アップロードできるのは画像ファイルのみです。'
#アップロードファイルのサイズが1MB以下であるか
elsif file.size > 1.megabyte
result = 'ファイルサイズは1MBまでです。'
else
#ファイル名をUTF-8→Shift-JISにエンコード
name = name.kconv(Kconv::SJIS, Kconv::UTF8)
#/public/docフォルダ配下にアップロードファイルを保存
File.open("public/docs/#{name}", 'wb') { |f| f.write(file.read) }
result = "#{name.toutf8}をアップロードしました。"
end
#成功/エラーメッセージを保存
render text: result
end