我正在构建一个日志解析器应用程序。我遵循了有关如何制作上传功能的教程,该教程有效。我用于上传功能的new.html.erb
如下所示(本教程是为接受简历而量身定制的,因此代码中的某些方法为@resume
):
<div class="container">
<% if @resume.errors.present? %>
<div>
<ul>
<% @resume.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div>
<%= form_for @resume, html: { multipart: true } do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<br><br>
<%= f.label :attachment %>
<%= f.file_field :attachment %>
<br>
<%= f.submit "Save" %>
<% end %>
</div>
我的resume.rb
如下:
class Resume < ApplicationRecord
mount_uploader :attachment, AttachmentUploader
validates :name, presence: true
end
我的attachment_uploader.rb
如下:
class AttachmentUploader < CarrierWave::Uploader::Base
# Include RMagick or MiniMagick support:
# include CarrierWave::RMagick
# include CarrierWave::MiniMagick
# Choose what kind of storage to use for this uploader:
storage :file
# storage :fog
# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
下一步,我尝试上载包含多个日志文件的压缩文件。我碰到了this question,它说明了如何提取文件,但没有说明在上传压缩文件时如何提取文件。那里的代码如下:
Zip::ZipFile.open(file_path) { |zip_file|
zip_file.each { |f|
f_path=File.join("destination_path", f.name)
FileUtils.mkdir_p(File.dirname(f_path))
zip_file.extract(f, f_path) unless File.exist?(f_path)
}
}
如果这些特定的代码行(完全兼容)应该放在哪里(在上面粘贴的url中)?应该在.erb
文件中还是.rb
文件中?如果是,请选择哪个文件?如何保存?
答案 0 :(得分:0)
测试代码是否正常的最简单方法-成功保存模型后(在create
操作中,可以在控制器中进行同步处理。
在大多数实际情况下,文件可能很大并且需要花费一些时间来处理-更好的方法是在后台作业中异步处理,因为这些滑轨具有ActiveJob framework