Рейтинг:0

Как установить значение поля зашифрованного файла программно

флаг je

Я пытаюсь программно установить значение поля зашифрованного файла. я использую Зашифрованные файлы модуль. Я успешно настроил поле файла, и оно работает для содержимого, созданного с помощью формы добавления узла.

В пользовательском коде я получаю файл, используя HTTP-клиент и хотите прикрепить к медиа. Я мог получить файл, зашифровать и сохранить его. Однако, если я хочу открыть файл, он сломан.

То, что я делаю, похоже на следующее:

  $client = Drupal::httpClient();

  // Получить данные с удаленной страницы и зашифровать с помощью профиля шифрования
  $data = (строка) $client->get('https://example.com/download.php?file=123')
    ->получить тело();
  $encryptionProfile = Drupal::entityTypeManager()
    ->getStorage('профиль_шифрования')
    ->load('my_encryption_profile');
  $encryptedData = Drupal::service('шифрование')
    ->шифровать($данные, $encryptionProfile);

  // Создаем медиаобъект и подготавливаем каталог назначения
  $media = Drupal::entityTypeManager()->getStorage('media')
    ->create(['bundle' => 'my_media_type']);
  $destination = 'зашифровать://мой_профиль_шифрования/путь/к/файлам'
  Drupal::service('файловая_система')
    ->prepareDirectory($destination, FileSystemInterface::CREATE_DIRECTORY);

  // Сохраняем данные как файл и прикрепляем к медиа
  $filename = 'скачать.pdf';
  $file = file_save_data($encryptedData, $destination . '/' . $filename);
  $media->set('encrypted_file', ['target_id' => $file->id()]);
  $медиа->сохранить();
флаг cn
Оболочка потока `encrypt` - это _оболочка схемы, которая шифрует/расшифровывает автоматически_ - так что вы, возможно, удваиваете, шифруя данные самостоятельно
Елин Й. avatar
флаг je
Я также ожидал того же, но если я использую `$data` вместо `$encryptedData`, например `file_save_data($data, $destination . '/' . $filename)`, файл сохраняется без шифрования, и я могу открыть это в файловой системе. Загрузка файла через оболочку потока по-прежнему не работает.
Елин Й. avatar
флаг je
@Clive спасибо, что указали мне правильное направление. Сначала я загружал файл с помощью «httpClient», а затем сохранял его с помощью «file_save_data». По какой-то причине это каким-то образом пропускало оболочку схемы. Вот почему я пытался зашифровать его вручную перед сохранением. Я изменил код и использовал `httpClient` напрямую для загрузки в пункт назначения, и он работал без ручного шифрования! Я опубликую подробное решение в ближайшие дни, как только у меня будет время.

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

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