不允许此文件类型。请尝试另一种

时间:2017-06-24 作者:Gqqnbig

我的wp配置。php已经

define(\'ALLOW_UNFILTERED_UPLOADS\', true);
但是当我上传一个。nb文件,它显示“不允许此文件类型。请尝试其他文件”

如何允许上载任何类型的文件?我的WP版本是4.7.3。

2 个回复
SO网友:Frank P. Walentynowicz

原始答案

将下面的代码添加到当前主题的functions.php:

function wpse_add_nb_mime_type( $allowed_mimes ) {
    $allowed_mimes[\'nb\'] = \'application/mathematica\';
    return $allowed_mimes;
}
add_filter( \'mime_types\', \'wpse_add_nb_mime_type\', 10, 1 );
删除define, 在您的问题中提到,来自wp-config.php. 现在你应该可以上传.nb 文件。

Plugin alternative: 要使上述代码不受主题更改的影响,最好将其放入插件中。创建新文件wpse-addnbmimetype.php, 使用此内容:

<?php
/*
Plugin Name: WPSE Add NB Mime Type
Description: Adds \'nb\' => \'application/mathematica\' to allowable mime types
*/
function wpse_add_nb_mime_type( $allowed_mimes ) {
    $allowed_mimes[\'nb\'] = \'application/mathematica\';
    return $allowed_mimes;
}

function wpse_prepare_add_nb_mime_type() {
    // this filter can be added as early as in init action
    add_filter( \'mime_types\', \'wpse_add_nb_mime_type\', 10, 1 );
}
add_action( \'init\', \'wpse_prepare_add_nb_mime_type\' );
将此文件放入“/wp-content/mu-plugins/”文件夹。现在,您可以切换主题,而不会丢失上载功能。nb文件。

分析

首先阅读对@majick答案的评论。经过所有更正后,他的过滤器将如下所示:

add_filter(\'upload_mimes\', \'modify_upload_mimes\', 10, 2);
function modify_upload_mimes($t, $user) {
    if ($user == null) {$user = wp_get_current_user();}
    if (in_array(\'administrator\', $user->roles)) {
        $t[\'nb\'] = \'application/mathematica\';
    }
    return $t;
}
它有效吗?是的,但它确实限制了文件的上载。仅“管理员”角色的nb扩展。作者和编辑将无法上载此类文件。让我们通过替换行来更改它:

if (in_array(\'administrator\', $user->roles)) {
使用:

if ( $user->has_cap( \'upload_files\' ) ) {
现在,作者、编辑和管理员可以上传。nb文件。

不鼓励针对用户角色进行检查,而应针对用户的功能进行检查。如果有一天,我们决定将“upload\\u files”功能添加到贡献者的角色(所有贡献者)或单个用户,我们的过滤器将正常工作,不会进行更改。

为什么我们有两个挂钩,可以选择“mime\\u类型”和“upload\\u mimes”?建议使用“mime\\U types”添加mime类型,使用“upload\\U mimes”删除(取消设置)mime类型。

“/wp includes/functions”中有两个函数。php“:第一个-get_allowed_mime_types( $user = null ), 引入“upload\\u mimes”过滤器挂钩,用于任意删除“swf”、“exe”,并有条件删除“htm | html”、mime类型和第二个-wp_get_mime_types(), 引入“mime\\U类型”过滤器挂钩,用于添加mime类型。

结论

从技术上讲,我们可以使用任意一个钩子作为解决方案,但根据建议,应该使用“mime\\U类型”。无需检查用户的功能,因为只有具有“upload\\u files”功能的用户才会触发两个挂钩。

SO网友:majick

您可以通过执行以下操作对此进行调试:

apply_filters(\'user_has_cap\',  \'check_user_caps\', 10, 4);
function check_user_caps($allcaps, $caps, $args, $user) {
    if (in_array(\'administrator\', $user->roles)) {
        echo "<!-- Admin Caps: "; print_r($allcaps); echo " -->";
    }
    return $allcaps;
}
然后检查页面源并查找“unfiltered\\u upload”功能。它应该在那里,如果不是出了什么问题。。。

另一种方法是使用upload_mimes 滤器这可能是一种更好的方式,因为您可以添加所需的扩展,因此是一种更安全的方式。例如:

add_filter(\'upload_mimes\', \'modify_upload_mimes\', 10, 2);
function modify_upload_mimes($t, $user) {
    if ($user == null) {$user = wp_get_current_user();}
    if (in_array(\'administrator\', $user->roles)) {
        $t[\'nb\'] = \'application/mathematica\';
    }
    return $t;
}
请参见函数get_allowed_mime_types 在里面wp-includes/functions.php

结束

相关推荐

将WordPress附件导入wp-Content/Uploads/中的自定义目录

我希望有人能阐明我试图解决的这个问题,即使只是简单地改变我的思维过程,告诉我如何解决这个问题。我正在将一个基于CakePHP的定制CMS web应用程序导入WordPress,方法是遍历数据库,进行大量SQL查询,构建数组,最后输出必要的XML文件,以便使用WordPress导入工具导入。目前我已经很好地导入了类别、标签和帖子/页面,没有问题,但问题似乎出在图像上。基于CakePHP的CMS中当前的图像格式是images/year/month/day/post_id/image_name.ext据我所知,