it-swarm.com.de

datei .vtt kann nicht auf WordPress 5.0.1 hochgeladen werden

Ich habe meine Site auf WordPress 5.0.1 aktualisiert, kann aber jetzt die Datei .vtt nicht mehr hochladen. Diese Funktion funktioniert einwandfrei unter WordPress 4.9.8

 enter image description here 

4
Prast

Wenn eine Datei hochgeladen wird, schaut WordPress hinein, um zu sehen, woraus sie besteht, um den echten MIME-Typ herauszufinden. Dies wird aus diesem Teil in wp_check_filetype_and_ext() bestimmt:

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

Dies bedeutet, dass der echte MIME-Typ einer .vtt-Datei text/plain ist.

Die Änderungen in wp_check_filetype_and_ext() in 5.0.1 haben die Validierung des MIME-Typs verschärft. Jetzt wird sichergestellt, dass der durch $real_mime beschriebene echte MIME-Typ der Datei mit dem der Dateierweiterung von wp_check_filetype() übereinstimmen muss, sofern dies unterstützt wird.

Der Grund, warum der .vtt-Upload in 5.0.1 fehlschlägt, ist, dass der echte Mime-Typ text/plain nicht mit text/vtt von der unterstützten .vtt-Dateierweiterung identisch ist.

Vor 5.0.1 die Ausgabe von wp_check_filetype_and_ext() beim Hochladen einer .vtt-Datei:

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

Nach 5.0.1 lautet die Ausgabe:

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

Die Verwendung des Filters wp_check_filetype_and_ext kann die in 5.0.1 eingeführte Logik außer Kraft setzen, wie von Dave Romsey in der Antwort hier demonstriert.

Dasselbe scheint für .csv -Dateien zu passieren, wie hier berichtet # 45615

Dies sollte in WordPress 5.0.3 für vtt behoben sein.

3
birgire

Ich habe einige Fehler behoben und konnte das Problem reproduzieren und lösen, aber leider konnte ich die spezifische Ursache nicht herausfinden. Im Allgemeinen scheint es, dass .vtt-Dateien die von wp_check_filetype_and_ext() durchgeführte Prüfung nicht bestehen.

Ich konnte .vtt Dateien hochladen (nur getestet auf WP 5.0.1), nachdem ich ein einfaches Plugin erstellt hatte, das den folgenden Code enthielt angepasst aus dieser Antwort von 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;
}

Ich habe auch festgestellt, dass .vtt -Dateien bereits standardmäßig in den zulässigen Mimen enthalten sind von WP, sodass es nicht erforderlich sein sollte (und auch nicht), den Mime-Typ vtt zur Liste hinzuzufügen, die vom Filter upload_mimes behandelt wird. z.B.:

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

weil der Eintrag für vtt bereits existiert.

Ich verwende eine einfache Demonstrations-VTT-Datei named test.vtt mit folgendem Inhalt:

WEBVTT - Diese Datei enthält keine Hinweise.

2
Dave Romsey