2017-09-06 2495 views
0

我的网站托管在共享服务器上。最大上传限制为5MB。如果上传的文件小于5MB,所有验证和文件上传都可以正常工作。但是当一个大于5MB的文件上传时,我看到这个 enter image description here。 如何验证或强制文件处于服务器的上传限制之下?Laravel最大上传大小限制

+0

可能你必须在php.ini中更改'upload_max_filesize'值。如果您无权更改ini文件,请联系您的主机提供商以更改此内容 –

+0

有没有其他方法?不更改服务器的上传限制? – baig772

+0

在您的资源文件夹中添加一个htaccess ..然后添加这一行..'php_value upload_max_filesize xM'和'php_value post_max_size xM'其中x =任意数值..例如:100M = 100mb – Demonyowh

回答

1

你做似乎没有兴趣更改PHP限制以允许更大的文件。它看起来像你想要你最大上传5MB,并返回一个适当的回应,如果它是。

您可以在异常处理程序app/Exceptions/Handler.php内处理FileException异常。更新render方法以添加您需要的代码。例如,如果您想要返回验证异常,则需要在异常处理程序中处理FileException异常的验证。

public function render($request, Exception $exception) 
{ 
    if ($exception instanceof \Symfony\Component\HttpFoundation\File\Exception\FileException) { 
     // create a validator and validate to throw a new ValidationException 
     return Validator::make($request->all(), [ 
      'your_file_input' => 'required|file|size:5000', 
     ])->validate(); 
    } 

    return parent::render($request, $exception); 
} 

这是未经测试的,但应该给你的一般想法。

你也可以通过javascript做客户端验证,这样一个太大的文件从来就不会真正发送到你的服务器,但是javascript可以被客户端禁用或者删除,所以最好有一个很好的服务器侧面处理设置。

对于客户端验证,如果您将事件处理程序附加到文件输入的“更改”事件,则可以使用this.files[0].size检查文件大小,然后执行任何其他操作(禁用表单,删除上载的文件等)

+1

这就是我正在寻找的东西。 – baig772

3
$validator = Validator::make($request->all(), [ 
    'file' => 'max:5120', //5MB 
]); 
在控制器

,并在php.ini

upload_max_filesize = 10MB 
+0

如上所述,如果文件小于5MB,但如果我上传的文件大小为10MB,并且我的服务器上的最大上传限制为5MB,则此操作将失效,它将引发异常 – baig772

+0

,则需要将apache的max_upload_size更改为大于5MB作为来自apache而不是laravel的异常,检查编辑的ans @ baig772 – Exprator

2

您可以使用Laravel验证规则:

'image_file_input_name' => 'required|mimes:jpeg,bmp,png|size:5000', 

大小:值

验证字段必须具有与给定值匹配的大小。 对于字符串数据,该值对应于字符数。对于 数字数据,该值对应于给定的整数值。对于 数组,大小对应于数组的数量。对于文件,大小 对应的文件大小以千字节为单位。

You can read more about validation and its usage.

0

您可以通过最大验证

'file' => 'required|max:5128'; // max file size: 5M 
0

在laravel可以验证这样的检查文件的大小 -

$validator = Validator::make($request->all(), [ 
    'file' => 'max:5120', 
]); 

该值以千字节为单位。即最大:10240 =最大10MB。 而在jQuery的 -

结合您的输入字段

$('#upFile').bind('change', function() { 

    //this.files[0].size   gets the size of your file and then you can validate accourdingly... 
    alert(this.files[0].size); 

}); 

希望这将帮助你的onchange事件。

0

你可以这样做与jQuery/JavaScript的(这意味着该文件将不会被上传,但你可以检查该文件,然后发送到PHP脚本)

$('#myFile').bind('change', function() { 
    let filesize = this.files[0].size // On older browsers this can return NULL. 
    let filesizeMB = (filesize/(1024*1024)).toFixed(2); 

    if(filesizeMB <= 5) { 
     // Allow the form to be submitted here. 
    } else { 
     // Don't allow submission of the form here. 
    } 

}); 

但总是做服务器端验证反正。 Incase你搬到一个更强大的网站,并仍然希望你的网站没有任何怪癖的工作。

$validator = Validator::make($request->all(), [ 
    'file' => 'max:5120', //5MB 
]); 

所有这些都没有经过测试,但应该有效。

1

的post_max_size的upload_max_filesize是指令你可以设置来配置你的php.ini文件或.htaccess文件或httpd.conf文件。

php.ini的例子:

post_max_size=15M 
upload_max_filesize=15M 

的.htaccess例如:

php_value post_max_size=15M 
php_value upload_max_filesize=15M 

的httpd.conf例如:

<VirtualHost *:80> 
    ServerName www.example.com 
    ServerAlias example.com 
    DocumentRoot /var/www/html/example/ 
    ErrorLog /var/log/httpd/error.log 
    <Directory /var/www/html/example/> 
     AllowOverride None 
     <IfModule mod_php5.c> 
     php_value post_max_size=15M 
     php_value upload_max_filesize=15M 
     </IfModule> 
    </Directory> 
</VirtualHost>