Good evening,
I have a problem with the module. It does not take into account the file size and stops at the size defined in the php.ini.
And when I set a file size there is an error message.

I am using Drupal 10.1.8 and PHP 8.1.23

the error message is as follows :
-----
Le site Web a rencontré une erreur inattendue. Veuillez essayer de nouveau plus tard.

TypeError: abs(): Argument #1 ($num) must be of type int|float, string given in abs() (line 137 of core/includes/common.inc).
format_size('400 MB') (Line: 156)
template_preprocess_file_upload_help(Array, 'file_upload_help', Array)
call_user_func_array('template_preprocess_file_upload_help', Array) (Line: 285)
Drupal\Core\Theme\ThemeManager->render('file_upload_help', Array) (Line: 445)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 592)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 149)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 70)
Drupal\file_resup\Form\FileFormAlterBase::managedFileProcess(Array, Object, Array) (Line: 23)
Drupal\file_resup\Form\FileWidgetFormAlter::managedFileProcess(Array, Object, Array)
call_user_func_array('Drupal\file_resup\Form\FileWidgetFormAlter::managedFileProcess', Array) (Line: 1012)
Drupal\Core\Form\FormBuilder->doBuildForm('node_aaa_edit_form', Array, Object) (Line: 1075)
Drupal\Core\Form\FormBuilder->doBuildForm('node_aaa_edit_form', Array, Object) (Line: 1075)
Drupal\Core\Form\FormBuilder->doBuildForm('node_aaa_edit_form', Array, Object) (Line: 1075)
Drupal\Core\Form\FormBuilder->doBuildForm('node_aaa_edit_form', Array, Object) (Line: 579)
Drupal\Core\Form\FormBuilder->processForm('node_aaa_edit_form', Array, Object) (Line: 325)
Drupal\Core\Form\FormBuilder->buildForm(Object, Object) (Line: 73)
Drupal\Core\Controller\FormController->getContentResult(Object, Object)
call_user_func_array(Array, Array) (Line: 123)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 592)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 124)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array) (Line: 97)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 181)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 76)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 106)
Drupal\page_cache\StackMiddleware\PageCache->pass(Object, 1, 1) (Line: 85)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object, 1, 1) (Line: 704)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)

-----

Thank you in advance for any feedback you may have.
Stéphen

Issue fork file_resup-3418177

Command icon Show commands

Start within a Git clone of the project using the version control instructions.

Or, if you do not have SSH keys set up on git.drupalcode.org:

Comments

ratanasdiabolo created an issue. See original summary.

ratanasdiabolo’s picture

Component: User interface » Code
anrikun’s picture

Assigned: ratanasdiabolo » Unassigned
ratanasdiabolo’s picture

Good evening,
Still no one with this type of problem?
The module does not work at all. If I put a max value of file, I have an error and if I don't put rioen, it does not take a file greater than the value of php.ini, that is to say 128 MB.
I don't understand…

I upgraded to php 8.2.10 but that doesn't change anything

dineshkumarbollu’s picture

Hi @ratanasdiabolo

Can you add steps to reproduce the issue, I will check the issue if you provide.

The reason might be upload size in code is taking as string '400' instead of int 400.This is the method where file size is passing, can you provide steps to reproduce i will debug the issue.Thanks

public static function managedFileProcess($element, FormStateInterface $form_state, $form) {
    // Add our resup element.
    $form_object = $form_state->getFormObject();
    $max_files = $element['#file_resup_max_files'];
    $upload_validators = $element['#upload_validators'];
    $description = [
      '#theme' => 'file_upload_help',
      '#description' => '',
      '#upload_validators' => $element['#upload_validators'],
      '#cardinality' => $element['#cardinality'],
    ];
    $element['resup'] = [
      '#type' => 'hidden',
      '#value_callback' => static::class . '::fileResupValue',
      '#field_name' => $element['#field_name'],
      '#upload_location' => $element['#upload_location'],
      '#file_resup_upload_validators' => $upload_validators,
      '#attributes' => [
        'class' => ['file-resup'],
        'data-entity-type-id' => $element['#file_resup_entity_type_id'],
        'data-bundle' => $element['#file_resup_bundle'],
        'data-form-type' => $element['#form_type'],
        'data-operation' => method_exists($form_object, 'getOperation') ? $form_object->getOperation() : 'default',
        'data-upload-name' => $element['upload']['#multiple'] ? $element['upload']['#name'] . '[]' : $element['upload']['#name'],
        'data-upload-button-name' => $element['upload_button']['#name'],
        'data-max-filesize' => $upload_validators['file_validate_size'][0] ?? $upload_validators['FileSizeLimit']['fileLimit'],
        'data-description' => \Drupal::service('renderer')->renderRoot($description)->__toString(),
        'data-parents' => Json::encode($element['#array_parents']),
        'data-url' => Url::fromRoute('file_resup.upload')->toString(),
        'data-drop-message' => $max_files > -1 ? (new PluralTranslatableMarkup($max_files, 'Drop a file here or click <em>Browse</em> below.', 'Drop up to @count files here or click <em>Browse</em> below.')) : t('Drop files here or click <em>Browse</em> below.'),
      ],
      '#prefix' => '<div class="file-resup-wrapper">',
      '#suffix' => '</div>',
      '#attached' => [
        'library' => ['file_resup/file_resup'],
        'drupalSettings' => [
          'file_resup' => [
            'chunk_size' => file_resup_chunksize(),
          ],
        ],
      ],
    ];
ratanasdiabolo’s picture

Good morning,

Thank you very much for watching.
In fact, I normally install the module then when I drop files greater than the php.ini limit, the site displays an error message.
When I put a transfer value of 600 MB for example in the parameters of my field, I get an error like this:
---------------------------------
The website encountered an unexpected error. Please try again later.

TypeError: abs(): Argument #1 ($num) must be of type int|float, string given in abs() (line 137 of core/includes/common.inc).

format_size() (Line: 157)
template_preprocess_file_upload_help()
call_user_func_array() (Line: 285)
Drupal\Core\Theme\ThemeManager->render() (Line: 433)
Drupal\Core\Render\Renderer->doRender() (Line: 204)
Drupal\Core\Render\Renderer->render() (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 149)
Drupal\Core\Render\Renderer->renderRoot() (Line: 70)
Drupal\file_resup\Form\FileFormAlterBase::managedFileProcess() (Line: 23)
Drupal\file_resup\Form\FileWidgetFormAlter::managedFileProcess()
call_user_func_array() (Line: 1012)
Drupal\Core\Form\FormBuilder->doBuildForm() (Line: 1075)
Drupal\Core\Form\FormBuilder->doBuildForm() (Line: 1075)
Drupal\Core\Form\FormBuilder->doBuildForm() (Line: 1075)
Drupal\Core\Form\FormBuilder->doBuildForm() (Line: 579)
Drupal\Core\Form\FormBuilder->processForm() (Line: 325)
Drupal\Core\Form\FormBuilder->buildForm() (Line: 73)
Drupal\Core\Controller\FormController->getContentResult()
call_user_func_array() (Line: 123)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 124)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext() (Line: 97)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 163)
Symfony\Component\HttpKernel\HttpKernel->handleRaw() (Line: 74)
Symfony\Component\HttpKernel\HttpKernel->handle() (Line: 58)
Drupal\Core\StackMiddleware\Session->handle() (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle() (Line: 106)
Drupal\page_cache\StackMiddleware\PageCache->pass() (Line: 85)
Drupal\page_cache\StackMiddleware\PageCache->handle() (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle() (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle() (Line: 51)
Drupal\Core\StackMiddleware\StackedHttpKernel->handle() (Line: 686)
Drupal\Core\DrupalKernel->handle() (Line: 19)

---------------------------------
I am under :
Drupal 10.0.9
PHP Version 8.1.27
Database Version 10.6.17-MariaDB
Memory ceiling of PHP 2048M

I also have a version under:
Drupal 10.1.8
PHP Version 8.2.10
Database
Version 5.7.42-log - MySQL system, Percona Server, or equivalent
Memory ceiling of PHP 512M
But it's the same. It does not work.

Thank you in advance for your help.
Stephen

ratanasdiabolo’s picture

in the watchdog, I have this:
TypeError: abs(): Argument #1 ($num) must be of type int|float, string given in abs() (line 137 of /home/njbo5967/gihpnormandie2023/web/core/includes/common.inc).

Tim Bozeman made their first commit to this issue’s fork.

tim bozeman’s picture

Version: 8.x-1.x-dev » 2.0.x-dev
Priority: Normal » Critical
Status: Active » Needs review

Thank you for the bug report!

At some point core changed their file validator names from things like file_validate_size to ['FileSizeLimit']['fileLimit']. We tried to support both the old and new validator names, but evidently it wasn't working for the new ones. Let's just remove the old validator names and move on. I think there's been enough time for most people to update their sites. I'll make this a 2.1.0 version when it is released since it could be a breaking change. Well I guess you could say the current version is broken... hmm 🤔

¯\_(ツ)_/¯

@ratanasdiabolo does this work for you?

ratanasdiabolo’s picture

Thank you, I will test all this and I will come back to hear from you if it works ;)

ratanasdiabolo’s picture

I'm sorry I have the same error message...

------------------------------------------------

Le site Web a rencontré une erreur inattendue. Veuillez essayer de nouveau plus tard.

TypeError: abs(): Argument #1 ($num) must be of type int|float, string given in abs() (line 137 of core/includes/common.inc).

format_size() (Line: 156)
template_preprocess_file_upload_help()
call_user_func_array() (Line: 285)
Drupal\Core\Theme\ThemeManager->render() (Line: 445)
Drupal\Core\Render\Renderer->doRender() (Line: 204)
Drupal\Core\Render\Renderer->render() (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 592)
Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 149)
Drupal\Core\Render\Renderer->renderRoot() (Line: 70)
Drupal\file_resup\Form\FileFormAlterBase::managedFileProcess() (Line: 23)
Drupal\file_resup\Form\FileWidgetFormAlter::managedFileProcess()
call_user_func_array() (Line: 1012)
Drupal\Core\Form\FormBuilder->doBuildForm() (Line: 1075)
Drupal\Core\Form\FormBuilder->doBuildForm() (Line: 1075)
Drupal\Core\Form\FormBuilder->doBuildForm() (Line: 1075)
Drupal\Core\Form\FormBuilder->doBuildForm() (Line: 579)
Drupal\Core\Form\FormBuilder->processForm() (Line: 325)
Drupal\Core\Form\FormBuilder->buildForm() (Line: 73)
Drupal\Core\Controller\FormController->getContentResult()
call_user_func_array() (Line: 123)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 592)
Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 124)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext() (Line: 97)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 181)
Symfony\Component\HttpKernel\HttpKernel->handleRaw() (Line: 76)
Symfony\Component\HttpKernel\HttpKernel->handle() (Line: 58)
Drupal\Core\StackMiddleware\Session->handle() (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle() (Line: 106)
Drupal\page_cache\StackMiddleware\PageCache->pass() (Line: 85)
Drupal\page_cache\StackMiddleware\PageCache->handle() (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle() (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle() (Line: 51)
Drupal\Core\StackMiddleware\StackedHttpKernel->handle() (Line: 704)
Drupal\Core\DrupalKernel->handle() (Line: 19)

Merci d'avance.
Stéphen

tim bozeman’s picture

Hmm, that's strange. Did you try re-saving the file size limits?

tostinni made their first commit to this issue’s fork.

tostinni’s picture

I think the problem @ratanasdiabolo faced is that he was trying to put a value like "200 MB" but right now max_upload_size will only accept integer.

I added a commit to this MR to let user enter those kind of values and add a description too (same as core file max upload size)

The error message we had was slightly different but I think it's the same cause.

TypeError : Drupal\Core\StringTranslation\ByteSizeMarkup::create(): Argument #1 ($size) must be of type int|float, string given, called in /opt/www/drupal/web/core/modules/file/file.module on line 1245 dans Drupal\Core\StringTranslation\ByteSizeMarkup::create() (ligne 28 de /opt/www/drupal/web/core/lib/Drupal/Core/StringTranslation/ByteSizeMarkup.php).

Btw @Tim Bozeman what is the reason between creating a new setting max_upload_size instead of reusing max_filesize ?
Checking it, it doesn't limit its value to PHP max_upload_size so you could already put a bigger value there although it wouldn't be applied without the override made by file_resup module.

Should we kept only one field to avoid confusion ?

@ratanasdiabolo can you try with this MR ?
You can apply it to your composer.json to the patches section:

        "patches": {
            "drupal/file_resup": {
                "[3418177-MR11] Fix Error message - file size": "https://git.drupalcode.org/project/file_resup/-/merge_requests/11.diff"
            }
        },
tim bozeman’s picture

Thank you very much tostinni! That's a great question and I bet you're right and there are some simplifications to be made there. My thinking while porting it from D7 was that that duplication was present in the D7 version too. I wasn't certain why there was two, but figured there may have been a reason for having both. All I knew was that the D7 version has been battle tested and proven and I tried to change as little as possible in how it functioned.

s_leu made their first commit to this issue’s fork.

s_leu’s picture

Issue summary: View changes
StatusFileSize
new214.7 KB

Trying this with a file that's approximately 14GB large, another issues surfaced. The filesize column is of type int and may be too small for really large files, see attached screenshot. I pushed a change containing an update hook which will change the filesize basefield into a big bigint DB column to tackle this.

filesize_column_too_small_for_laarge_files

tim bozeman’s picture

Thanks sebastian! How about when people just install file_resup? I think we need to set bigint on the field too. Also, there's a commented out update hook in the last commit 😅

ricovandevin’s picture

StatusFileSize
new11.34 KB

Attaching patch file created from MR 11 for easier and safer Composer workflow.

ricovandevin’s picture

I did not review the code of the MR but the changes seem to resolve the issue with file size limit.

  • tim bozeman committed 0aaae465 on 2.0.x
    Issue #3418177 by s_leu, tim bozeman, ricovandevin, tostinni,...
tim bozeman’s picture

Status: Needs review » Fixed

We've been using this for a while too. I think it's good to go! Thanks everybody!

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.