use Drupal\file\Entity\File;
$file = File::create([
'filename' => basename($filepath),
'uri' => 'public://my-dir/' . basename($filepath),
'status' => 1,
'uid' => 1,
]);
$file->save();
Mark new file as used
/** @var \Drupal\file\FileUsage\DatabaseFileUsageBackend $file_usage */
$file_usage = \Drupal::service('file.usage');
$file_usage->add($file, 'MY_MODULE', 'node', 1);
Or create file from data
use Drupal\Core\File\FileSystemInterface;
$data = 'Text file example content';
/** @var \Drupal\file\FileRepositoryInterface $fileRepository */
$fileRepository = \Drupal::service('file.repository');
$file = $fileRepository->writeData($data, 'public://reviews/' . $filename, FileSystemInterface::EXISTS_REPLACE);
// Attach file to node.
$entity->set('field_review_avatar', $file);
$entity->save();