1. ホーム
  2. ruby-on-rails

[解決済み] Railsでファイルをアップロードする

2023-08-19 23:04:38

質問

私はrailsの初心者で、CRUDテクニックを使ってRESTfulなウェブサイトを書いています。今のところ、私は3つのページを作成し、すべてのページでユーザーがデータベースから行を作成、編集、および削除することができます。しかし、a) Railsでファイルシステムがどのように動作するか知らないので、ファイルがどこに保存されるべきかがわかりません。ファイルは100kb程度で、常にダウンロードされるため、一時的なストレージに保存することはできません。また、b) ファイルに書き込む方法がわかりません。

私が上で述べたこと、つまり入力フォームにアップロード入力を作成し、その後、別のディレクトリのファイルパスにファイルを書き込む方法を教えていただけると助かります。

どのように解決するのですか?

2018年の更新情報

以下に書かれていることはすべてそのままですが、Rails 5.2には新たに active_storage が追加され、S3 (または他のクラウドストレージサービス) への直接アップロードや画像変換などができるようになりました。をチェックする必要があります。 rails ガイド をチェックして、何が自分のニーズに合っているかを自分で判断してください。


ファイルアップロードをうまく解決してくれるgemはたくさんありますが( https://www.ruby-toolbox.com/categories/rails_file_uploads を参照)、railsには組み込みのヘルパーがあり、簡単に独自のソリューションを開発することができます。

を使用します。 file_field -ヘルパーを使用すると、rails がアップロードを処理します。

<%= form_for @person do |f| %>
  <%= f.file_field :picture %>
<% end %>

以下のように、アップロードされたファイルにコントローラでアクセスできるようになります。

uploaded_io = params[:person][:picture]
File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'wb') do |file|
  file.write(uploaded_io.read)
end

実現したいことの複雑さによりますが、簡単なファイルのアップロード/ダウンロードのタスクであればこれで十分です。この例はrailsガイドから引用したもので、詳細はそちらを参照してください。 http://guides.rubyonrails.org/form_helpers.html#uploading-files