Рейтинг:1

Reference private file?

флаг in

I'm making migration plugin which I'm using in first migration and it is creating private file like this:

if ($final_destination) {
  // Create a file entity.
  $file = File::create([
    'uri' => $final_destination,
    'uid' => $uid,
    'status' => FILE_STATUS_PERMANENT,
  ]);

  $uri = $file->getFileUri();

  $stream = new S3fsStream();
  $stream->writeUriToCache($uri);

  if ($stream->waitUntilFileExists($uri)) {
    $file->save();
    return $file->getFileUri();
  }
}

Then, second migration should create media entities, by using those files (with migration lookup plugin).

However, when I run second migration I get error message:

media: field_image.0=You do not have access to the referenced entity file: 46

If file is public then it works, but how can I reference private files? The error is triggered in ReferenceAccessConstraintValidator.php.

  // We check that the current user had access to view any newly added
  // referenced entity.
  if ($check_permission && !$referenced_entity->access('view')) {
    $type = $value->getFieldDefinition()->getSetting('target_type');
    $this->context->addViolation($constraint->message, ['%type' => $type, '%id' => $id]);
  }
флаг br
Убедитесь, что у вашего пользователя есть доступ к этому частному файлу, иначе вы не сможете обратиться к нему или получить к нему доступ.
флаг br
С другой стороны, когда я выполнял миграцию, мне никогда не приходилось создавать плагин для создания медиафайлов. Но вы должны установить поле мультимедиа для сохранения файлов в приватный каталог (очевидно). Если у вас есть URL-адрес (даже внешний), вам просто нужно указать его для файла, и предоставленный плагин загрузит его для вас - если я хорошо помню, как это было давно.
Рейтинг:0
флаг in

Выяснил, что это известная проблема, исправленная в Drupal 9.3. С предыдущими версиями следует применить патч:

https://www.drupal.org/project/drupal/issues/3134470

Этот вопрос на других языках:

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

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