Ruby on rails 表单将文件提交到rails中的控制器上载操作

Ruby on rails 表单将文件提交到rails中的控制器上载操作,ruby-on-rails,Ruby On Rails,控制器: class SongsController < ApplicationController . . . def upload bucket = find_bucket file = params[:file] edit: previously was file = :file if bucket AWS::S3::S3Object.store(file, open(file), buc

控制器:

class SongsController < ApplicationController
    .
    .
    .

    def upload
    bucket = find_bucket
    file = params[:file] edit: previously was file = :file
    if bucket           
        AWS::S3::S3Object.store(file, open(file), bucket)
        redirect_to root_path
    else
        render text: "Couldn't upload"
    end
end  


    private

    .
    .
    .

    def find_bucket
    AWS::S3::Bucket.find('kanesmusic')
end                     
end
在索引视图中上载表单:

<h2>Upload a new MP3:</h2>  

<%= form_tag upload_path, :method => "post", :multipart => true do %>  
    <%= file_field_tag :file %>  
    <%= submit_tag "Upload" %>  
<% end %>
编辑错误:

SongsControllerupload中的TypeError…无法将AWS::S3::Bucket转换为字符串


我正在尝试创建此表单,该表单可以从用户硬盘中选择一个文件并将其上载。

您需要使用参数。存储所有变量的地方

像这样:

  params[:file]
但是对于使用文件上传,这有点不同,请看一下文档


您需要使用params。存储所有变量的地方

像这样:

  params[:file]
但是对于使用文件上传,这有点不同,请看一下文档


哦,是的。当我这样做时,我现在在SongsControllerupload中得到错误TypeError…无法将AWS::S3::Bucket转换为字符串。有什么想法吗?你用的是哪颗宝石?那颗用的是对磁盘上文件的引用。你得把临时工送来。用于上载的文件名。我想:params[:file].tempfile.path您可以检查params[:file]。检查到您的日志谢谢@Rogier。这确实允许上载文件,但上载文件的名称变为tmp/RackMultipart20130901-12859-vi2uhm,而不是正确的文件名。有什么想法吗?太好了!如果我看@[S3Object.storefile,openfile,'jukebox'],name是第一个参数,第二个是文件句柄。也许你可以改变它,这样你就有了一个可读的文件名?哦,是的。当我这样做时,我现在在SongsControllerupload中得到错误TypeError…无法将AWS::S3::Bucket转换为字符串。有什么想法吗?你用的是哪颗宝石?那颗用的是对磁盘上文件的引用。你得把临时工送来。用于上载的文件名。我想:params[:file].tempfile.path您可以检查params[:file]。检查到您的日志谢谢@Rogier。这确实允许上载文件,但上载文件的名称变为tmp/RackMultipart20130901-12859-vi2uhm,而不是正确的文件名。有什么想法吗?太好了!如果我看@[S3Object.storefile,openfile,'jukebox'],name是第一个参数,第二个是文件句柄。也许你可以改变它,这样你就有了一个可读的文件名?