Рейтинг:1

Как перенести файлы из-за пределов Drupal, уже имея файлы там, где они должны быть, создавая файловые объекты

флаг pe

Я выполняю миграцию с сайта, отличного от Drupal, пока в целях тестирования. У меня есть все данные в файлах CSV.

Поскольку я новичок в переходе на Drupal 9 из-за пределов Drupal, я изучаю это небольшими, несколько простыми этапами.

Исходные данные включают в себя кучу записей, многие из которых имеют вложенные файлы. Некоторые файлы прикреплены более чем к одной записи. К некоторым записям прикреплено несколько файлов. «Прикрепленный» здесь означает, что URL-адрес хранится вместе с небольшим количеством метаданных, таких как краткое описание и тип. В базе данных это таблица соединений, чтобы связать файлы с записями.

Чего я хочу добиться в итоге в Drupal:

Все эти записи перенесены в виде узлов, файлы присоединены к носителям, а файлы присоединены к правильным узлам по ссылке на сущность. Созданные объекты мультимедиа должны иметь старые метаданные (описание, тип) в настраиваемых полях.

Я понимаю, что это должно быть сделано следующим образом:

  1. Перенос файлов в файловые сущности
  2. Используя группу миграции (модули migrate_plus, migrate_tools и migrate_source_csv), используйте тот же источник данных и migration_lookup для переноса медиаобъектов
  3. Перенесите узлы и используйте плагин процесса entity_generate и value_key целевого идентификатора или что-то еще, чтобы связать узлы с правильными медиаобъектами.

Файлы уже находятся там, где они должны быть на сервере, а пути/URI хранятся в CSV-файле вместе с описанием и типом, уникальным полем идентификатора и идентификатором каждой связанной записи.

В качестве отправной точки я попытался импортировать 30 файлов как отдельный импорт. Модуль migrate_files не показался мне подходящим, в основном потому, что я не могу понять, как адаптировать его к ситуации, когда объекты мультимедиа собираются извлекать данные поля из csv... и файлы uri хранятся в CSV также.

Поэтому я подумал, что попробую его в основном со стандартом.

Это был мой ямл:

UUID: 1bcec3e7-0a49-4473-87a2-6dca09b91abjan-test1
идентификатор: fileimptest
label: Импорт тестового файла
миграция_группа: по умолчанию
источник:
  плагин: 'CSV'
  путь: '/srv/imports/filetest1.tab'
  разделитель: "\т"
  вложение: '"'
  header_offset: ноль
  идентификаторы: [помощь]
# не использовать большинство этих полей при импорте файла
# но в том числе, потому что может понадобиться для группировки
# и migrate_lookup в импорте медиа?
  поля:
    0:
      имя: помощь
      label: 'Уникальный идентификатор'
    1:
      имя: титул
      метка: 'описание'
    2:
      имя: formflag
      метка: 'FormYN'
    3:
      имя: новый путь
      метка: 'путь'
    4:
      имя: документ
      метка: 'номер документа'
    5:
      имя: тип документа
      метка: 'тип документа'

процесс:
  ИД:
    плагин: default_value
    значение_по умолчанию: 179
  ури: путь
пункт назначения:
  плагин: сущность:файл

В результате мои 30 тестовых файлов появились в списке файлов в разделе admin/conent со статусом временных. Ссылки выглядят правильно, но нажатие на них приводит к отказу в доступе 403 (права доступа к папке 777 и принадлежат веб-серверу).(Я использую частную файловую систему, и у меня есть несколько файлов, загруженных через обычные виджеты поля: этот список со статусом «постоянный». Ссылки выглядят одинаково, за исключением подкаталогов, но нормально открываются при нажатии.)

Итак, вопросы:

  • Что я делаю неправильно до сих пор?
  • Есть ли способ лучше? (Я почти уверен, что есть, но что?)

(Подробности: uid 179 — это просто созданный мной пользователь с именем «импортер») Я должен отметить, что я прочитал это и этои множество примеров в соответствующих модулях. Вместе они сообщили мне о том, к чему я пришла, насколько я их понимаю.)

Редактировать: «временный статус» просто означает, что пока нет применений, поэтому на данный момент это не важно. Единственное, что кажется неправильным в этом тестовом импорте, — это проблема с отказом в доступе. В процессе миграции не хватает чего-то необходимого для полноценной работы частной файловой системы? Может быть, при использовании личных файлов их можно просматривать только в том случае, если они «используются» на другом объекте? Я еще не нашел информации об этом и не придумал способ проверить это.

Edit2: за комментарии и ответ ниже, «временный» статус может быть установлен программно во время импорта, и отказ в доступе является нормальным в этих условиях.: когда импортированный файл а) нигде не используется и б) щелкнут пользователем, отличным от идентификатора uid в файле.

Рейтинг:1
флаг cn

Временный статус — это поле в объекте файла (положение дел), вы можете установить это на 1 во время импорта, чтобы сделать его постоянным.

процесс:
  ИД:
    плагин: default_value
    значение_по умолчанию: 179
  ури: путь
  положение дел: 
    плагин: default_value
    значение_по умолчанию: 1

Использование файлов является отдельной (связанной) вещью и не должно здесь играть роли. Эти ссылки будут добавлены, когда вы свяжете файлы с содержимым и т. д.

флаг pe
Спасибо.Знаете ли вы, влияет ли использование на возможность открытия файла по ссылке в списке файлов? Я, вероятно, собираюсь продолжить тест группы миграции файлов + носителей, поэтому я посмотрю, как это повлияет на мои 403. Большинству просто любопытно, объясняет ли отсутствие каких-либо связанных сущностей, почему файлы все 403... или у меня, вероятно, другая проблема.
флаг cn
В очень конкретном случае, который, похоже, вы могли вызвать, да - если файл является временным, не используется, а владелец файла не является текущим пользователем, доступ запрещен.
флаг pe
Я могу подтвердить, что именно поэтому мне отказывают в доступе к ним. Зарегистрирован как UID 179, и файлы открываются. Спасибо за вашу помощь!

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

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.