加载文件B. Rails

我是新的b。 rails, 我写了一个网站 RESTful, 使用该技术 CRUD. 到目前为止,我创建了三页,每个页面允许用户从数据库中创建,编辑和删除字符串。 但是,我的第四页将必须包含文件加载表格,但/ 我不知道文件系统如何运作 Rails, 因此,我不知道必须存储文件的位置。 该文件将靠近 100 KB,不能保存在临时存储中,因为它将不断加载。 和B./ 我不知道如何写入文件。

如果你能告诉我如何做到上面的事情会很好 - 在输入表单中创建引导输入,然后将文件写入单独目录中的文件路径。
已邀请:

龙天

赞同来自:

更新 2018

虽然下面写的一切仍然是真的,但 Rails 5.2 现在包括
active_storage

, 这允许您将这样的东西上传直接加载 S3 /或其他存储服务 cloud/, 图像转换等。您必须检查
https://edgeguides.rubyonrails ... .html
rails 并决定自己,符合您的需求。

虽然有许多宝石很好解决了下载文件的问题 /查看列表 https://www.ruby-toolbox.com/c ... oads/, rails 它具有内置的帮助者,允许您轻松滚动自己的解决方案。

使用助手
file_field

-form 用你的形式,和 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


这取决于您想要实现的内容的复杂性,但这对于下载文件的简单任务来说已经足够了。 此示例是从手册中获取的 rails, 您可以获取更多信息:
http://guides.rubyonrails.org/ ... files

快网

赞同来自:

九月 2018

当年

对于那些最近检查过这个问题的人,
https://guides.rubyonrails.org ... .html
因为它是内核的一部分 Rails 5.2+ 现在,整合了很好 & 开箱即用的机会 /还是所有其他着名的宝石,如 Carrierwave, Shrine, paperclip, ... 华丽,但这提供了非常好的功能,我们可以考虑任何新项目。 Rails/

纸夹已经过时了 gem 赞同,支持,受赏识,有利 Rails ActiveStorage.

https://github.com/rails/rails ... orage
& 到处都有许多资源

https://gorails.com/episodes/f ... s-5-2
非常有用,可用于了解功能 Activestorage

快网

赞同来自:

有一个好的 gem 特别是用于下载文件:
https://github.com/jnicklas/carrierwave
. 如果一个 wiki 没有帮助
http://railscasts.com/episodes ... loads
关于使用它的最佳方法 . 总结,你可以说 , 什么形态 Rails 有一个字段类型
file

, 这会导致文件下载对话框。 你可以用它但是 'magic' 完毕
carrierwave

gem .

我不知道你的意思 "how to write to a file" , 但我希望这是一个很好的开始。

龙天

赞同来自:

好的。 例如,如果您不想将文件存储在数据库中并将其存储在应用程序中,例如 assets /custom folder/, 您可以定义与定义的数据库无关的实例变量 attr_accessor: document 和使用
form_for - f.file_field

获取文件,

在控制器中


@person = Person.new/person_params/


这里
person_params

返回白色列表
params[:person]

/确定自己/

将文件保存为


dir = "#{Rails.root}/app/assets/custom_path"
FileUtils.mkdir/dir/ unless File.directory? dir
document = @person.document.document_file_name # check document uploaded params
File.copy_stream/@font.document, "#{dir}/#{document}"/


注意,添加此路径
.gitignore

&, 如果要再次使用此文件,请添加此路径
asset_path

an 应用程序
application.rb


每当表单读取文件字段时,它会收到文件夹中的存储 tmp, 后来您可以将其保留在家中,我带领一个例子在资产中存放

笔记

: 此类文件的存储将增加应用程序的大小,最好存储在数据库中使用
paperclip

.

小姐请别说爱

赞同来自:

在你的 intiallizer/carrierwave.rb


if Rails.env.development? || Rails.env.test?
config.storage = :file
config.root = "#{Rails.root}/public"
if Rails.env.test?
CarrierWave.configure do |config|
config.storage = :file
config.enable_processing = false
end
end
end


使用它来存储在本地计算机上的文件中存储

要回复问题请先登录注册