Încerc să setez valoarea unui câmp de fișier criptat în mod programatic. eu folosesc Fișiere criptate modul. Am configurat cu succes un câmp de fișier și funcționează pentru conținutul creat folosind formularul de adăugare a nodului.
Într-un cod personalizat, primesc un fișier folosind HttpClient
și doriți să vă atașați la un media.
Aș putea obține fișierul, cripta și salva. Cu toate acestea, dacă vreau să deschid fișierul, acesta este rupt.
Ceea ce fac eu este așa:
$client = Drupal::httpClient();
// Obțineți date de pe pagina de la distanță și criptați folosind profilul de criptare
$date = (șir) $client->get('https://example.com/download.php?file=123')
->getBody();
$encryptionProfile = Drupal::entityTypeManager()
->getStorage('profil_criptare')
->load('profilul_my_encryption');
$encryptedData = Drupal::service('criptare')
->encrypt($date, $encryptionProfile);
// Creați o entitate media și pregătiți directorul de destinație
$media = Drupal::entityTypeManager()->getStorage('media')
->create(['bundle' => 'my_media_type']);
$destination = 'encrypt://my_encryption_profile/path/to/files'
Drupal::service('sistem_fișier')
->prepareDirectory($destination, FileSystemInterface::CREATE_DIRECTORY);
// Salvați datele ca fișier și atașați-le la media
$filename = 'descărcare.pdf';
$file = file_save_data($encryptedData, $destination . '/' . $filename);
$media->set('fișier_criptat', ['target_id' => $fișier->id()]);
$media->salvare();