I have my website hosted at a shared server. The maximum upload limit is 5MB. All the validations and file uploading works fine if the uploaded file is under 5MB. But when a file greater than 5MB is uploaded, i see this . How can I validate or force the file to be under the upload limit from server?
问题:
回答1:
You don't seem interested in changing the PHP limits to allow larger files. It looks to me like you want your max upload to be 5MB, and return a proper response if it is over that.
You can handle the FileException
exception inside your exception handler at app/Exceptions/Handler.php
. Update the render
method to add in the code you need. For example, if you'd like to return a validation exception, you will need to handle the validation inside the exception handler for the FileException
exception.
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);
}
This is untested, but should give you the general idea.
You can also do client side validation via javascript, so that a file that is too large is never actually sent to your server, but javascript can be disabled or removed by the client, so it would be good to have nice server side handling set up.
For the client side validation, if you attach an event handler to the "change" event for the file input, you can check the file size using this.files[0].size
, and perform any additional actions after that (disable form, remove uploaded file, etc.)
回答2:
$validator = Validator::make($request->all(), [
'file' => 'max:5120', //5MB
]);
in your controller
and in php.ini
upload_max_filesize = 10MB
回答3:
post_max_size and upload_max_filesize are directives you can set to configure your php.ini file OR .htaccess file OR httpd.conf file.
php.ini example:
post_max_size=15M
upload_max_filesize=15M
.htaccess example:
php_value post_max_size=15M
php_value upload_max_filesize=15M
httpd.conf example:
<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>
回答4:
You can use Laravel validation rules:
'image_file_input_name' => 'required|mimes:jpeg,bmp,png|size:5000',
size:value
The field under validation must have a size matching the given value. For string data, the value corresponds to the number of characters. For numeric data, the value corresponds to a given integer value. For an array, size corresponds to the count of the array. For files, size corresponds to the file size in kilobytes.
You can read more about validation and its usage.
回答5:
The 5 mb limitation is set by your webhost and likely cannot be changed.
To upload files larger than the limit you will have to upload it in parts.
A laravel package that does so: https://github.com/jildertmiedema/laravel-plupload
回答6:
you can check size of your file by max validator
'file' => 'required|max:5128'; // max file size: 5M
回答7:
In laravel you can validate like this -
$validator = Validator::make($request->all(), [
'file' => 'max:5120',
]);
The value is in kilobytes. i.e. max:10240 = max 10 MB. And in jquery -
binds to onchange event of your input field
$('#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);
});
Hope this will help you.
回答8:
You could do this with jQuery / javascript (Which means that the file will not be uploaded but you can check the file before it is sent to your PHP script)
$('#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.
}
});
But always do serverside validation anyways. Incase you move to a stronger website and still want your website to work without any quirks.
$validator = Validator::make($request->all(), [
'file' => 'max:5120', //5MB
]);
All of this is untested, but should work.