
こんにちは、現役沖縄フリーランスエンジニアのmah(MaLanka)です。
このブログでは、
僕がIT未経験から約1年でフリーランスエンジニアになるまでの過程、
ノウハウなどを書いていきます。
今回は、
画像ファイルの形式をバリデーションする必要があったので、
備忘録として残しておきます。
Rubyで画像ファイルの形式(gif, png, jpg)を判定する
今回の例では、
- Base64でエンコードされた、画像のバイナリ文字列
が渡ってくることを想定します。
ファイル名の拡張子で判定はしません。
画像が持つバイナリデータから判定します。
【結論】
def image_type!(encoded_str)
raise if encoded_str.nil?
decoded_str = Base64.decode64(encoded_str)
case decoded_str
when /GIF8[79]a/n
return 'gif'
when /\x89PNG/n
return 'png'
when /\xFF\xD8/n
return 'jpg'
else
raise
end
end
〜処理の流れ〜
1.Base64でエンコードされた、画像のバイナリ文字列をデコードする 2.デコードしたバイナリ文字列に対し、正規表現を当てて、gif, png, jpgのいずれかであることを検証 3.マッチした拡張子を文字列で返す ※gif, png, jpg以外の画像形式の場合はエラー
以上、
- Rubyで画像ファイルの形式(gif, png, jpg)を判定する
でした。