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是第一个参数,第二个是文件句柄。也许你可以改变它,这样你就有了一个可读的文件名?