📜  Ruby on Rails 2.1-文件上传(1)

📅  最后修改于: 2023-12-03 15:04:56.746000             🧑  作者: Mango

Ruby on Rails 2.1 - 文件上传

在 Ruby on Rails 2.1 中,文件上传变得更加容易。Rails 内置了 Action Controller 和 Action View 功能,它们可以帮助我们简化文件上传业务逻辑。

生成上传文件的表单

我们可以使用 form_for 方法生成上传文件的表单,同时需要设置 multipart: true 来告诉 Rails 表单需要处理文件上传。

<%= form_for @user, url: { action: :create }, html: { multipart: true } do |f| %>
  <%= f.label :avatar %>
  <%= f.file_field :avatar %>
  <%= f.submit %>
<% end %>

这样生成的表单可以上传文件。

处理上传文件

在 Controller 中,我们需要处理上传文件,可以使用 params[:user][:avatar] 获取上传的文件,然后可以使用 File 类的 open 方法来处理上传的文件。

def create
  @user = User.new(user_params)
  if params[:user][:avatar]
    uploaded_io = params[:user][:avatar]
    File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'wb') do |file|
      file.write(uploaded_io.read)
    end
    @user.avatar = uploaded_io.original_filename
  end
  if @user.save
    redirect_to @user
  else
    render :new
  end
end

在上面的代码中,uploaded_io.original_filename 可以获取上传文件的文件名,我们可以将其保存在数据库中,在后续的展示页面中使用。

展示上传的文件

我们可以使用 image_tag 或者 link_to 帮助我们展示上传的图片或者文件。

<%= image_tag @user.avatar_path if @user.avatar_path %>

这样就可以在视图中展示上传的图片了。

总结

使用 Rails 2.1 进行文件上传非常简单,只需要使用 form_for 方法上传文件,然后在 Controller 中使用 params[:user][:avatar] 就可以获取上传的文件,最后需要展示上传的图片或者文件可以使用 image_tag 或者 link_to 方法进行展示。