Skip to content

Instantly share code, notes, and snippets.

@steffenr
Last active February 27, 2023 18:33
Show Gist options
  • Save steffenr/a40bab1f3b1c066d5c0655351e2107fd to your computer and use it in GitHub Desktop.
Save steffenr/a40bab1f3b1c066d5c0655351e2107fd to your computer and use it in GitHub Desktop.
[Drupal 8] Create file/ media_entity programmatically
<?php
$filesystem = \Drupal::service('file_system');
// Create file entity.
$image = File::create();
$image->setFileUri($destination);
$image->setOwnerId(\Drupal::currentUser()->id());
$image->setMimeType('image/' . pathinfo($destination, PATHINFO_EXTENSION));
$image->setFileName($filesystem->basename($destination));
$image->setPermanent();
$image->save();
// Create media entity with saved file.
$image_media = Media::create([
'bundle' => 'image',
'uid' => \Drupal::currentUser()->id(),
'langcode' => \Drupal::languageManager()->getDefaultLanguage()->getId(),
'status' => Media::PUBLISHED,
'field_image' => [
'target_id' => $image->id(),
'alt' => t('Placeholder image'),
'title' => t('Placeholder image'),
],
]);
$image_media->save();
@bhavesh-hirani
Copy link

Thanks @Adm94. I tried what you said and it now works fine. Thanks a lot.

@ChristopheCaron
Copy link

You can directly pass the file Entity when you create the media like this :

$image_media = Media::create([
'bundle' => 'image',
'uid' => \Drupal::currentUser()->id(),
'langcode' => \Drupal::languageManager()->getDefaultLanguage()->getId(),
'field_image' => $file
]);

@mhentry
Copy link

mhentry commented May 5, 2020

Hi, is it possible to load existing media image into a media field ? I used Media::create but the problem is, its creating duplicate in the media browser, I tied Media::load with the media id of the image, no luck.
any assistance would be really helpful.

@ChristopheCaron
Copy link

To avoid duplicate in the media browser, you can use the form display entity reference autocomplete.

@mhentry
Copy link

mhentry commented May 7, 2020

Hi Chris, thank you for the reply. If I use autocomplete it will difficult for the editor to browse the existing image they required.

@Romaixn
Copy link

Romaixn commented Oct 5, 2020

Don't you need to set the thumbnail and field_media_image key in the Media entity too ?
For my case, without that, my media entity was associated with a default file.

"thumbnail" => [
     "target_id" => $file->id(),
     "alt" => $file->getFilename(),
],
"field_media_image" => [
    "target_id" => $file->id(),
     "alt" => $file->getFilename(),
],

Thanks a lot, that worked with "thumbnail" 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment