Я пытаюсь программно установить значение поля зашифрованного файла. я использую Зашифрованные файлы модуль. Я успешно настроил поле файла, и оно работает для содержимого, созданного с помощью формы добавления узла.
В пользовательском коде я получаю файл, используя 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()]);
$медиа->сохранить();