diff --git a/core/modules/file/src/Plugin/Field/FieldType/FileItem.php b/core/modules/file/src/Plugin/Field/FieldType/FileItem.php index dc37bf03502c6f875fb8cfc417785eaa1a635148..c8c96c254202a30efb61d1382876266ba2776414 100644 --- a/core/modules/file/src/Plugin/Field/FieldType/FileItem.php +++ b/core/modules/file/src/Plugin/Field/FieldType/FileItem.php @@ -180,7 +180,7 @@ public function fieldSettingsForm(array $form, FormStateInterface $form_state) { '#type' => 'textfield', '#title' => $this->t('Maximum upload size'), '#default_value' => $settings['max_filesize'], - '#description' => $this->t('Enter a value like "512" (bytes), "80 KB" (kilobytes) or "50 MB" (megabytes) in order to restrict the allowed file size. If left empty the file sizes will be limited only by PHP\'s maximum post and file upload sizes (current limit <strong>%limit</strong>).', ['%limit' => format_size(Environment::getUploadMaxSize())]), + '#description' => $this->t('Enter a value like "512" (bytes), "80 KB" (kilobytes) or "50 MB" (megabytes) in order to restrict the allowed file size. If left empty the file sizes could be limited only by PHP\'s maximum post and file upload sizes (current limit <strong>%limit</strong>).', ['%limit' => format_size(Environment::getUploadMaxSize())]), '#size' => 10, '#element_validate' => [[static::class, 'validateMaxFilesize']], '#weight' => 5, diff --git a/core/modules/file/src/Plugin/Validation/Constraint/FileValidationConstraintValidator.php b/core/modules/file/src/Plugin/Validation/Constraint/FileValidationConstraintValidator.php index a6da920c669762428b29ae828301d320e7f153c3..cc7a17def8c8f3630e6e049c99fb8b5d4e0224a7 100644 --- a/core/modules/file/src/Plugin/Validation/Constraint/FileValidationConstraintValidator.php +++ b/core/modules/file/src/Plugin/Validation/Constraint/FileValidationConstraintValidator.php @@ -2,6 +2,7 @@ namespace Drupal\file\Plugin\Validation\Constraint; +use Drupal\Component\Utility\Bytes; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintValidator; @@ -23,6 +24,17 @@ public function validate($value, Constraint $constraint) { $file = $target->getValue(); // Get the validators. $validators = $value->getUploadValidators(); + + // Always respect the configured maximum file size. + $field_settings = $value->getFieldDefinition()->getSettings(); + if (array_key_exists('max_filesize', $field_settings)) { + $validators['file_validate_size'] = [Bytes::toNumber($field_settings['max_filesize'])]; + } + else { + // Do not validate the file size if it is not set explicitly. + unset($validators['file_validate_size']); + } + // Checks that a file meets the criteria specified by the validators. if ($errors = file_validate($file, $validators)) { foreach ($errors as $error) {