【问题标题】:simple file upload in Rails doesn't workRails 中的简单文件上传不起作用
【发布时间】:2016-06-21 08:16:36
【问题描述】:

我有一个基于 Rails3 和 Ruby1.9 的应用程序。我想上传一个文件。我一直在尝试一个简单的解决方案,我在这里的几个帖子中遇到过。

表格

=form_for :upload, :html => {:multipart => true} do |f|
   = f.file_field :my_file
   = f.submit "Upload"

控制器

def file_upload
    path = File.join("public/", upload["my_file"].original_filename)
    File.open(path, "wb") { |f| f.write(upload["my_file"].read) }
end

路线

root :to => "pages#index"
resources :pages do
    collection {post :file_upload}
end

当我点击“上传”时,我没有收到任何错误,但文件没有上传到公共目录中。我错过了什么?

【问题讨论】:

  • 显示您用于创建该表单的控制器操作,以及您的路线。
  • 嗨@smathy 谢谢你的回复。我添加了路由并更正了表单的名称 (:upload) 以与控制器操作 (upload["my_file"]) 保持一致。
  • 您仍然没有显示renders 表单的控制器方法。您正在展示旨在从表单接收 POST 的控制器方法,但我要求查看呈现表单的控制器方法。
  • 我明白了,据我所知,这就是我所缺少的。我还没有创建渲染表单的方法。你能举个例子吗?
  • 你应该从Getting Started Guide开始

标签: ruby-on-rails file-upload


【解决方案1】:

这个解决方案对我有用 (reference)。

控制器:将保存目录从 public 更改为 public/uploads。使用 Rails.root 进行路径的连接。

def upload
    uploaded_io = params[:file]
    File.open(Rails.root.join('public', 'uploads',uploaded_io.original_filename), 'wb') do |file|
         file.write(uploaded_io.read)
         respond_to do |format|
             format.html { redirect_to(root_url, :notice => 'File was uploaded.') }
         end
     end
end

表单:将 form_for 更改为 form_tag

=form_tag({action: :upload}, multipart: true) do
    = file_field_tag 'file'
    = submit_tag 'Upload'

路线:

root :to => "pages#index"
resources :pages do
    collection {post :upload}
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    相关资源
    最近更新 更多