In a Laravel 7 application I am uploading images. In my last batch I uploaded roughly 600 jpegs and 80 of these jpegs failed to be uploaded becaus of a Laravel validation error. The other jpegs were uploaded successful.
I checked all these 80 jpegs manually via Ubuntu command line tool file
and also via php-interactive-mode finfo
. Both tell that the mime-type is image/jpeg
.
But my code in Laravel
$this->validate($request, [
'file' => 'required',
'file' => 'file',
'file' => 'mime-types:image/jpeg'
]);
returns message: "The given data was invalid.", errors: {file: ["validation.mime_types"]}}
beause the mime-type was evaluated to be application/octet-stream
from Laravel.
I then thought okay, Laravel might do some special coding. Therefore I checked the source-code of Laravel at FileinfoMimeTypeGuesser.php and at FileBinaryMimeTypeGuesser.php. But Laravel obviously only either uses file -b --mime -- %s
or new \finfo(\FILEINFO_MIME_TYPE, $this->magicFile)
; so nothing special at all.
And both code-options result in (as written before) image/jpeg
when I use file
on the Ubuntu command line or finfo
in an interactive-mode php session for any of the above mentioned 80 jpegs which Laravel rejected.
Can anyone help me on this? How is Laravel determining the mime-type? Maybe there is a magic database in Laravel which I need to update?
Thanks in advance.