web-dev-qa-db-fra.com

ne peux pas télécharger le fichier .vtt sur wordpress 5.0.1

J'ai mis à jour mon site pour wordpress 5.0.1, mais maintenant je ne peux plus télécharger le fichier .vtt. Cette fonction fonctionne correctement sur wordpress 4.9.8

 enter image description here 

4
Prast

Quand un fichier est chargé, WordPress y jette un coup d'œil pour voir de quoi il est fait, pour connaître le type de mime réel. Ceci est déterminé à partir de cette partie dans wp_check_filetype_and_ext():

$finfo = finfo_open( FILEINFO_MIME_TYPE );
$real_mime = finfo_file( $finfo, $file );

Cela signifie que le type mime réel d'un fichier .vtt est text/plain.

Les modifications apportées à wp_check_filetype_and_ext() dans 5.0.1 ont rendu la validation du type mime plus stricte. Maintenant, vous devez vous assurer que le type mime réel du fichier, décrit par $real_mime, doit correspondre à celui de l'extension de fichier de wp_check_filetype(), s'il est pris en charge.

La raison pour laquelle l'envoi .vtt dans la version 5.0.1 échoue est que le type mime réel text/plain n'est pas le même que text/vtt de l'extension de fichier .vtt prise en charge.

Avant la version 5.0.1, la sortie de wp_check_filetype_and_ext() lors du téléchargement d’un fichier .vtt:

Array ( [ext] => vtt [type] => text/vtt [proper_filename] => )

Après 5.0.1, le résultat est:

Array ( [ext] => [type] => [proper_filename] => )

L'utilisation du filtre wp_check_filetype_and_ext peut remplacer la logique introduite dans la version 5.0.1, comme l'a démontré Dave Romsey dans la réponse ici .

La même chose semble se passer pour les fichiers .csv, comme indiqué ici # 45615

Cela devrait être résolu dans WordPress 5.0.3 pour vtt.

3
birgire

J'ai fait du débogage et j'ai pu reproduire et résoudre le problème, mais malheureusement, je n'ai pas été en mesure de déterminer la cause spécifique. De manière générale, il semble que les fichiers .vtt échouent à la vérification effectuée par wp_check_filetype_and_ext() .

J'ai été en mesure de télécharger des fichiers .vtt (uniquement testés sur WP 5.0.1) après avoir créé un simple plugin contenant le code suivant adapté de cette réponse par brasofilo :

// Sets the extension and mime type for .vtt files.
add_filter( 'wp_check_filetype_and_ext', 'wpse_file_and_ext', 10, 4 );
function wpse_file_and_ext( $types, $file, $filename, $mimes ) {
    if ( false !== strpos( $filename, '.vtt' ) ) {
        $types['ext'] = 'vtt';
        $types['type'] = 'text/vtt';
    }

    return $types;
}

J'ai également noté que .vtt sont déjà inclus dans les mimes autorisés par défaut par WP, il ne devrait donc pas (et n'est en fait) pas nécessaire d'ajouter le type mime vtt à la liste gérée par le upload_mimes filtre. par exemple.:

add_filter( 'upload_mimes', 'wpse_mime_types');
function wpse_mime_types( $mimes ) {
  $mimes['vtt'] = 'text/vtt';
  return $mimes;
}

parce que l'entrée pour vtt existe déjà.

J'utilise un simple fichier de démonstration VTT named test.vtt avec le contenu suivant:

WEBVTT - Ce fichier n'a pas de repère.

2
Dave Romsey