アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

拡張子なし、application/octet-stream のアップロード

こんにちは、tahara です。

Android からのファイルアップロードはエントロピーの神々に支配されているのでしょうか? 拡張子なし、Content-Type: application/octet-stream で jpeg ファイルが ブラウザから POST されたりします。

そんな POST に対応するには(Paperclip 使用)...

class TempFile < ActiveRecord::Base
  has_attached_file :temp
  before_post_process :ensure_temp_file_name_extension

  protected

  def ensure_temp_file_name_extension
    return true unless File.extname(self.temp_file_name) == ''

    unless VALID_IMAGE_CONTENT_TYPE.include?(self.temp_content_type)
      file = Paperclip.io_adapters.for(temp)
      self.temp_content_type =
        Paperclip::FileCommandContentTypeDetector.new(file.path).detect
    end

    extension = MIME::Types[self.temp_content_type].first.extensions.first rescue nil
    if extension
      self.temp_file_name = self.temp_file_name + '.' + extension
    end
    true
  end
end

エンジニアとかプログラマとか募集中です。