Laravel 5 Mime de validation
Ok, je suis en train de télécharger une vidéo, et de valider le type de fichier.
Selon la documentation:
mimes:foo,bar,...
Le fichier en cours de validation doit avoir un type MIME correspondant à la liste des extensions.
L'Utilisation de base De MIME Règle
'photo' => 'mimes:jpeg,bmp,png'
J'upload une vidéo wmv, et mes règles sont donc:
return [
'file' => ['required', 'mimes:video/x-ms-wmv']
]
J'ai fait un print_r()
sur Request::file('file')
et je reçois les données suivantes:
Symfony\Component\HttpFoundation\File\UploadedFile Object
(
[test:Symfony\Component\HttpFoundation\File\UploadedFile:private] =>
[originalName:Symfony\Component\HttpFoundation\File\UploadedFile:private] => SampleVideo.wmv
[mimeType:Symfony\Component\HttpFoundation\File\UploadedFile:private] => video/x-ms-wmv
[size:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 70982901
[error:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 0
[pathName:SplFileInfo:private] => C:\wamp\tmp\php6428.tmp
[fileName:SplFileInfo:private] => php6428.tmp
)
Cependant j'obtiens le message d'erreur:
{"file":["The file must be a file of type: video\/x-ms-wmv."]}
J'ai essayé de changer le "type mime" pour video/*
, wmv
(selon les docs) et aussi video/x-ms-wmv
pourtant, aucun d'entre eux valider correctement le fichier.
Comme vous pouvez le voir à partir de la print_r()
le type mime de Symfony est arriver est video/x-ms-wmv
.
Je fais quelque chose de mal? Ou peut Laravel/Symfony juste de ne pas valider les fichiers bien?
J'apprécie l'aide
Modifier
Ok, j'ai ouvert validator.php
et a ajouté echo $value->guessExtension();
à la ValidateMimes()
méthode, et il produit de l'asf.
Pourquoi Symfony sortie video\x-ms-wmv
, l'extension du fichier est wmv, je suis validant les deux d'entre eux, mais Laravel est de deviner asf
?!
C'est trop peu fiable pour la vidéo de validation pour moi.
- J'ai aussi eu ce problème et le problème était avec la version de PHP, j'ai été à l'aide, essayez de créer une vanille fichier php et de vérifier le type mime d'une vidéo avec le Fileinfo la fonction php.net/manual/en/book.fileinfo.php
Vous devez vous connecter pour publier un commentaire.
Ce comportement est normal.
Laravel est appel
guessExtension
sur de l'orchestre Symphonique de UploadedFile objet, qui sera de retour l'attend extension du fichier, pas le type mime.C'est pourquoi le documenatation les états que pour une image téléchargée, vous devez utiliser:
De Symfony
guessExtension
appelsgetMimeType
, qui utilise PHP Fileinfo Fonctions d'aller et de deviner le type mime d'un fichier donné.Une fois
getMimeType
devine le type mime du fichier, Symfony MimeTypeExtensionGuesser coups de pied pour obtenir l'extension de la type mime récupérées à partir d'un fichier.Par conséquent, vos règles devraient être:
La raison que
asf
devrait être inclus est principalement historique. Pour citer Wikipédia:La documentation de Microsoft sur la différence entre ASF et WMV/WMA états:
Parce que la structure interne du fichier est identique (y compris les des numéros de magie pour le format de fichier), wmv, wma et asf sont un et le même. La seule différence entre les trois extensions est l'icône qui est affichée à l'intérieur de l'Explorateur.
Ce n'est pas seulement des fichiers Windows Media qui auront cette question, Listes de wikipédia beaucoup de vidéo différents formats de conteneurs qui ont le même problème. Si vous voulez trouver le codec vidéo qui est utilisé dans un conteneur, vous allez avoir besoin de regarder plus que juste de la "des modèles magic" qui sont utilisés par le
fileinfo
fonctions.Cela étant dit, comportement attendu != comportement correct.
J'ai soumis un pull request pour ajouter un nouveau validateur, appelé
mimetypes
. Cela ne que vous attendez et utilise l'aurez deviné type mime pour valider un fichier à télécharger, au lieu de l'extension qui est deviné par le type mime.jpeg
fichiers marqués commejpg
, etc). Le problème avecwmv
c'est que c'est un format de conteneur, commemkv
, donc, juste parce que c'est ".wmv" à la fin, ne signifie pas qu'il est acutally à l'aide de laWindows Media Video
format.'fontwoff2colum' => 'mimes:woff2'
application/font-woff
. Voir github.com/symfony/mime/blob/master/MimeTypes.php