无法在WordPress 5.0.1上载文件.vtt

时间:2018-12-13 作者:Prast

我将我的网站更新为wordpress 5.0.1,但现在我无法上传文件。vtt不再存在。此功能在wordpress 4.9.8上正常工作

enter image description here

2 个回复
SO网友:Dave Romsey

我做了一些调试,并能够重现和解决问题,但不幸的是,我无法找出具体原因。总的来说,似乎.vtt 文件未通过由执行的检查wp_check_filetype_and_ext().

我可以上传.vtt 创建包含以下代码的简单插件后的文件(仅在WP 5.0.1上测试)adapted from this answer by 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;
}
我还注意到.vtt files are already included in the allowed mimes by default 因此,不应该(实际上也没有必要)添加vtt mime类型到由upload_mimes 滤器e、 g.:

add_filter( \'upload_mimes\', \'wpse_mime_types\');
function wpse_mime_types( $mimes ) {
  $mimes[\'vtt\'] = \'text/vtt\';
  return $mimes;
}
因为vtt 已存在。

我在用一个简单的demonstration VTT file 已命名test.vtt 包括以下内容:

WEBVTT-此文件没有提示。

SO网友:birgire

上传文件时,WordPress会查看文件的组成,找出真正的mime类型。这是根据中的此部分确定的wp_check_filetype_and_ext():

$finfo = finfo_open( FILEINFO_MIME_TYPE );
$real_mime = finfo_file( $finfo, $file );
这就意味着真正的哑剧类型.vtt 文件,istext/plain.

中的更改wp_check_filetype_and_ext() 在5.0.1中,mime类型验证更加严格。现在,它可以确保文件的真正mime类型$real_mime, 必须与文件扩展名中的扩展名匹配wp_check_filetype(), 如果支持的话。

为什么.vtt 5.0.1中的上载失败是真正的mime类型text/plain 不同于text/vtt 从支持的.vtt 文件扩展名。

5.0.1之前wp_check_filetype_and_ext() 上载时。vtt文件:

Array ( [ext] => vtt [type] => text/vtt [proper_filename] => )
5.0.1之后,输出为:

Array ( [ext] => [type] => [proper_filename] => )
使用wp_check_filetype_and_ext 过滤器可以覆盖5.0.1中引入的逻辑,如Dave Romsey在回答中所示here.

同样的情况似乎也发生在.csv 此处报告的文件#45615

这应该在WordPress 5.0.3中解决vtt.

相关推荐

ADD_THEME_SUPPORT(‘CUSTOM-HEADER-UPLOADS’);功能有什么作用?

同时向functions.php 文件中,我发现了以下内容:add_theme_support(\'custom-header-uploads\');这到底是做什么的?我删除了条目functions.php 但对网站没有什么不同。我最初认为这与上传标题图像的能力有关,但这取决于add_theme_support(\'custom-header\');在执行搜索时,我无法在Codex中看到任何有意义的信息。这是某种贬值的特征还是我忽略了什么?