Страницы

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

четверг, 9 января 2020 г.

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

#ruby_on_rails #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 файлу, у меня в базу либо записывается весь
массив либо не записывается ничего
    


Ответы

Ответ 1



Как пример, этот код напечатает все имена файлов с расширением xml в папке /tmp Dir.chdir("/tmp") do Dir.glob("*.xml").each do |file_name| puts file_name end end

Ответ 2



Не могу понять как мне получить список имен файлов Вы можете выполнить shell команды и получить список файлов из директории по ответу. Например: names = `ls path/to/xml_files | grep xml`.split("\n") Получив имена файлов Вы уже можете работать с ними.

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

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