diff -u b/core/modules/media/src/Form/MediaBulkUploadForm.php b/core/modules/media/src/Form/MediaBulkUploadForm.php --- b/core/modules/media/src/Form/MediaBulkUploadForm.php +++ b/core/modules/media/src/Form/MediaBulkUploadForm.php @@ -203,7 +203,7 @@ $upload_validators = $this->mergeUploadValidators($this->getTypes()); $form['upload'] = [ '#type' => 'managed_file', - '#process' => array_merge($process, ['::processUpload']), + '#process' => array_merge(['::cleanupFilesOnError'], $process, ['::processUpload']), '#upload_validators' => $upload_validators, '#multiple' => TRUE, ]; @@ -232,13 +232,43 @@ 'callback' => '::updateFormCallback', 'wrapper' => 'media-build-upload-form-wrapper', ]; - // Remove the Managed File element's table display - we don't use it. - unset($element['remove_button']); - foreach ($element['#value']['fids'] as $fid) { - if (isset($element['file_' . $fid])) { - unset($element['file_' . $fid]); - } + return $element; + } + + /** + * Cleanup files in the upload (managed_file) element on error. + * + * When an error occurs during uploading files, remove all files so the user + * can re-upload the files. + * + * @param array $element + * The upload element. + * @param \Drupal\Core\Form\FormStateInterface $form_state + * The form state. + * + * @return array + * The processed upload element. + * + * @throws \Drupal\Core\Entity\EntityStorageException + * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException + */ + public function cleanupFilesOnError(array &$element, FormStateInterface $form_state) { + $errors = $form_state->getError($element); + + if (empty($errors)) { + return $element; } + + /** @var \Drupal\file\FileStorageInterface $file_storage */ + $file_storage = $this->entityTypeManager->getStorage('file'); + $fids = $form_state->getValue('upload')['fids']; + + /** @var \Drupal\file\FileInterface[] $files */ + $files = $file_storage->loadMultiple($fids); + $file_storage->delete($files); + + $element['#value'] = []; + $form_state->setValue($element, []); return $element; } @@ -275,8 +305,8 @@ $form['title'] = [ '#type' => 'html_tag', '#tag' => 'p', - '#value' => $this->t('Select the media type for @file', [ - '@file' => $this->currentFile->label(), + '#value' => $this->t('Select the media type for %file', [ + '%file' => $this->currentFile->label(), ]), ];