.../Plugin/rest/resource/FileUploadResource.php | 82 +++++++++++++++++++--- 1 file changed, 73 insertions(+), 9 deletions(-) diff --git a/core/modules/file/src/Plugin/rest/resource/FileUploadResource.php b/core/modules/file/src/Plugin/rest/resource/FileUploadResource.php index 82e42c1fa5..dc4e592720 100644 --- a/core/modules/file/src/Plugin/rest/resource/FileUploadResource.php +++ b/core/modules/file/src/Plugin/rest/resource/FileUploadResource.php @@ -2,9 +2,13 @@ namespace Drupal\file\Plugin\rest\resource; +use Drupal\Core\Config\Config; use Drupal\Core\Entity\EntityConstraintViolationListInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; +use Drupal\Core\File\FileSystemInterface; +use Drupal\Core\Lock\LockBackendInterface; use Drupal\Core\Session\AccountInterface; +use Drupal\Core\Utility\Token; use Drupal\file\FileFieldUploader; use Drupal\rest\ModifiedResourceResponse; use Drupal\rest\Plugin\ResourceBase; @@ -14,6 +18,7 @@ use Drupal\rest\RequestHandler; use Psr\Log\LoggerInterface; use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException; @@ -62,11 +67,11 @@ class FileUploadResource extends ResourceBase { const BYTES_TO_READ = 8192; /** - * The file field uploader. + * The file system service. * - * @var \Drupal\file\FileFieldUploader + * @var \Drupal\Core\File\FileSystemInterface */ - protected $fileFieldUploader; + protected $fileSystem; /** * The entity type manager. @@ -89,6 +94,39 @@ class FileUploadResource extends ResourceBase { */ protected $currentUser; + /** + * The MIME type guesser. + * + * @var \Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface + */ + protected $mimeTypeGuesser; + + /** + * The token replacement instance. + * + * @var \Drupal\Core\Utility\Token + */ + protected $token; + + /** + * The lock service. + * + * @var \Drupal\Core\Lock\LockBackendInterface + */ + protected $lock; + + /** + * @var \Drupal\Core\Config\ImmutableConfig + */ + protected $systemFileConfig; + + /** + * The file field uploader. + * + * @var \Drupal\file\FileFieldUploader + */ + protected $fileFieldUploader; + /** * Constructs a FileUploadResource instance. * @@ -102,21 +140,42 @@ class FileUploadResource extends ResourceBase { * The available serialization formats. * @param \Psr\Log\LoggerInterface $logger * A logger instance. - * @param \Drupal\file\FileFieldUploader $file_field_uploader - * The file field uploader service. + * @param \Drupal\Core\File\FileSystemInterface $file_system + * The file system service. * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager * The entity type manager. * @param \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager * The entity field manager. * @param \Drupal\Core\Session\AccountInterface $current_user * The currently authenticated user. + * @param \Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface $mime_type_guesser + * The MIME type guesser. + * @param \Drupal\Core\Utility\Token $token + * The token replacement instance. + * @param \Drupal\Core\Lock\LockBackendInterface $lock + * The lock service. + * @param \Drupal\Core\Config\Config $system_file_config + * The system file configuration. + * @param \Drupal\file\FileFieldUploader $file_field_uploader + * The file field uploader. */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, $serializer_formats, LoggerInterface $logger, FileFieldUploader $file_field_uploader, EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $entity_field_manager, AccountInterface $current_user) { + public function __construct(array $configuration, $plugin_id, $plugin_definition, $serializer_formats, LoggerInterface $logger, FileSystemInterface $file_system, EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $entity_field_manager, AccountInterface $current_user, MimeTypeGuesserInterface $mime_type_guesser, Token $token, LockBackendInterface $lock, Config $system_file_config, FileFieldUploader $file_field_uploader = NULL) { parent::__construct($configuration, $plugin_id, $plugin_definition, $serializer_formats, $logger); - $this->fileFieldUploader = $file_field_uploader; + $this->fileSystem = $file_system; $this->entityTypeManager = $entity_type_manager; $this->entityFieldManager = $entity_field_manager; $this->currentUser = $current_user; + $this->mimeTypeGuesser = $mime_type_guesser; + $this->token = $token; + $this->lock = $lock; + $this->systemFileConfig = $system_file_config; + if ($file_field_uploader instanceof FileFieldUploader) { + $this->fileFieldUploader = $file_field_uploader; + } + else { + @trigger_error("The 'file.uploader.field' service must be passed to FileUploadResource::__construct(), it is required before Drupal 9.0.0. See https://www.drupal.org/project/drupal/issues/2940383.", E_USER_DEPRECATED); + $this->fileFieldUploader = \Drupal::service('file.uploader.field'); + } } /** @@ -129,10 +188,15 @@ public static function create(ContainerInterface $container, array $configuratio $plugin_definition, $container->getParameter('serializer.formats'), $container->get('logger.factory')->get('rest'), - $container->get('file.uploader.field'), + $container->get('file_system'), $container->get('entity_type.manager'), $container->get('entity_field.manager'), - $container->get('current_user') + $container->get('current_user'), + $container->get('file.mime_type.guesser'), + $container->get('token'), + $container->get('lock'), + $container->get('config.factory')->get('system.file'), + $container->get('file.uploader.field') ); }