在Rails中上传文件
我是新手,我正在使用CRUD技术编写一个RESTful网站。 到目前为止,我已经创build了三个页面,所有这些页面都允许用户从数据库中创build,编辑和删除一行。 不过,我的第四页需要包含一个上传文件的forms,但是a)我不知道文件系统如何与Rails协同工作,因此我不知道应该在哪里存储文件。 该文件将是100kb左右,不能存储在临时存储,因为它会不断下载。 和b)我不知道如何写入一个文件。
如果你能告诉我如何去做上面提到的 – 在input表单上创build一个上传input,然后将文件写到一个单独的目录中的文件path,这将是非常好的。
虽然有很多解决file upload很好的gem(请参阅https://www.ruby-toolbox.com/categories/rails_file_uploads的列表),rails有内置的助手,可以很容易地推出自己的解决scheme。;
在你的表单中使用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
这取决于你想要实现的复杂性,但这对于简单的file upload/下载任务来说已经足够了。 这个例子是从导轨指南,你可以去那里获得进一步的信息: http : //guides.rubyonrails.org/form_helpers.html#uploading-files
有一个很好的gem,特别是上传文件: carrierwave 。 如果wiki没有帮助,那么最好的方法就是使用RailsCast 。 总结一下,Rails表单中有一个字段types的file
,它调用file upload对话框。 你可以使用它,但'魔法'是由carrierwave
gem完成的。
我不知道“如何写入文件”是什么意思,但我希望这是一个不错的开始。