おれんじりりぃぶろぐ

きっと何者にもなれないエンジニアのブログ

Railsでgemを使わずにファイルをアップロードしてみた

RailsにはCarrierWaveなど画像アップロード用の便利なGemが存在するが
あえて今回はそれを使わずに実装を行った時のメモ。

View#作成

まずはアップロード用のフォームを作成する。今回は音声アップロード用の実装を行ったが、画像でも同じ方法で実装できるはず。

<%= form_for @audio do |f| %>
  <%= f.label "音声新規アップロード", class: 'control-label' %>
  <%= f.file_field :value %>
  <%= f.submit "アップロード" %>
<% end %>

Controller#作成

def create
 @audio = Audio new

 file = params[:audio][:value]
 if !file.nil? 
      name = file.original_filename
      # パスの指定
      @audio.path = 'audio/' + name
      @audio.save

      # ファイル本体のアップロード
      File.open("public/" + @audio.path, "wb"){ |f|
        f.write(file.read)
      }
 end
 redirect_to root_path
end

Controller#削除

def destroy
    @audio = Audio.find(params[:id])
    # 音声ファイル本体の削除
    File.delete("public/" + @quiz.path)
    # modelの削除
    @audio.destroy
    redirect_to root_path
end

まとめ

Gemって便利\(^o^)/

参考