【问题标题】:Symfony2 - maxSize parameter not working on file uploadSymfony2 - maxSize 参数不适用于文件上传
【发布时间】:2013-06-11 04:06:53
【问题描述】:

我的 Symfony2 项目有一个文件上传功能。

我正在这样设置 maxSize 参数:

$manuscript_file = new File(array(
        'maxSize' => '20M',
        'mimeTypes' => array(
            'application/msword',
            'application/zip',
        ),
        'mimeTypesMessage' => 'Please upload a valid manuscript file. Valid types are: doc, docx, zip',
    ));

问题是当我尝试上传 2M 或 3M 字文件时,我收到了验证消息:

 The file is too large. Allowed maximum size is 20M bytes.

你遇到过吗?还是我的代码错了。

我以 Symfony 文档中的示例为例:

Symfony File - Validation Constraints Reference

【问题讨论】:

    标签: php validation symfony file-upload


    【解决方案1】:

    如果您使用 POST 上传文件,请注意 php.ini 中的 post_max_size 限制

    【讨论】:

      【解决方案2】:

      我创建了一个 jQuery 验证方法来防止将大文件发送到服务器,因为 php 不验证它(它是西班牙语):

      $(function() {
          //Validate 20MB
          validarFileSize('#carga_telefonos_form_file', {{ 10*1024*1024 }}, '#div-mensaje-file-size', '#botonSubmit');
      });
      
      function validarFileSize(campo, maximo, divMensaje, btnGuardar) {
          console.debug("validarFileSize. Campo: " + campo + ", maximo: " + maximo);
          $(campo).bind('change', function() {
              var size = this.files[0].size;
              if (size > maximo) {
                  $(divMensaje).show();
                  $(btnGuardar).attr('disabled', 'disabled');
              } else {
                  $(divMensaje).hide();
                  $(btnGuardar).removeAttr('disabled');
              }
          });
      }
      

      【讨论】:

        【解决方案3】:

        我已经面临这个问题,所以我发布了这个解决方案(我认为这对你来说是同样的问题)。

        这是 Symfony 的 known bug,实际上当文件大小对于您的 PHP 配置而言太大时,框架也会显示验证器错误消息,而不是出现经典的 PHP 错误。

        在您当前的 PHP 配置中,您可能将最大上传大小限制为 2M,因此 Symfony 显示错误的错误。

        所以检查您的 php.ini 文件(Linux 上的 /etc/php5/apache2/php.ini)并增加 max_upload_size 以适合您的领域:

        upload_max_filesize = 20M
        

        别忘了重启 apache:apache2ctl restart

        现在应该可以了!

        请注意,这可能在上一个 Symfony 版本上已修复,另一种解决方案可能是将您的项目升级到 sf2.3(但我不确定)^^

        【讨论】:

        • 完美,现在可以了,我在php.ini文件中修改了upload_max_filesize = 30M。这个值你怎么看,这样可以吗?
        • 这完全取决于您的机器存储能力以及您在服务器上存储的内容。对于word(或open)文档,我认为这是完全正确的,它们很少更高!
        • 请记住,post_max_size 参数也应该与您的最大允许文件的大小相匹配。否则,您将继续遇到与 OP 相同的错误。所以你必须post_max_size = 21M添加到你的php.ini
        猜你喜欢
        • 2012-08-02
        • 2015-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-09
        • 1970-01-01
        • 2013-12-22
        • 2015-01-09
        相关资源
        最近更新 更多