Страницы

Поиск по вопросам

понедельник, 8 июля 2019 г.

Открытие файлов в ruby

В папке лежит много разных 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

Комментариев нет:

Отправить комментарий