В папке лежит много разных xml, которые необходимо добавить в базу данных. Механизм получения данных из xml есть, но работает, если я загружаю файлы через сайт. То есть при добавлении файла в базу данных происходит сравнение названия файла в базе и в папке. Хочу автоматизировать данный процесс через cron. Не могу понять как мне получить список имен файлов и добавить их в базу данных.
Вот контроллер, который загружает файлы через сайт:
folder="public/mse/upload/all"
FileUtils.mkdir_p("#{Rails.root}/#{folder}") unless File.directory?("#{Rails.root}/#{folder}")
params[:xml_attachments].each do |uploaded|
filename = uploaded.original_filename
unless MseXml.where(xml_id: filename).present?
File.open(Rails.root.join(folder, uploaded.original_filename),'wb') do |file|
file.write(uploaded.read)
end
MseXml.create(xml_id: filename)
Из формы берется params[:xml_attachments]
=form_tag load_files_xml_path, method: 'post', multipart: true, class: "form-horizontal" do
%h3 Выбрать файлы
=file_field_tag :file, :multiple => true, name: "xml_attachments[]"
%br
=submit_tag 'Загрузить файлы', class: "btn btn-primary"
mse_xmls имеет поле xml_id, которое содержит имя файла.
Пример: 000CD110-41B6-407F-A9EF-6A35A5D5D2A7.xml
Как реализовать получение всех имен файлов и добавление этих имен в MseXml?
Наглядно это выгляди так:
names=список имен файла.each do |f|(работа с 1 файлом)
unless MseXml.where(xml_id: f).present?
MseXml.create(xml_id: f)
puts 'файл сохранен'
end
Я не могу разбить список файлов по 1 файлу, у меня в базу либо записывается весь массив либо не записывается ничего
Ответ
Как пример, этот код напечатает все имена файлов с расширением xml в папке /tmp
Dir.chdir("/tmp") do
Dir.glob("*.xml").each do |file_name|
puts file_name
end
end
Комментариев нет:
Отправить комментарий