允许上载CSV文件

时间:2017-02-27 作者:fightstarr20

我正在尝试在仪表板菜单页中允许CSV文件,如下所示。。

<form method="post" enctype="multipart/form-data">
    <input type="file" name="csv_file" id="csv_file"  multiple="false" accept=".csv" />
    <input type="submit" value="Upload" />
</form>


require_once( ABSPATH . \'wp-admin/includes/file.php\' );
require_once( ABSPATH . \'wp-admin/includes/media.php\' );

$attachment_id = media_handle_upload ( \'csv_file\', 0, array(), array(
    \'test_form\' => false,
    \'mimes\'     => array(
        \'csv\'   => \'text/csv\',
    ),
) );
当我将CSV文件上载到表单时,会收到以下错误消息。。。

Sorry, this file type is not permitted for security reasons.
有人能看出我做错了什么吗?我假设在上述代码中允许CSV mime类型。

3 个回复
最合适的回答,由SO网友:Nathan Johnson 整理而成

有一个bug 在WordPress 4.7-4.7.3中,与验证MIME类型相关,因此Dave Romsey提供的代码无法工作。

有一个plugin in the repo 这将绕过MIME检查,但它禁用对所有用户和所有扩展的检查。我认为更好的方法是为管理员添加一个新功能,允许他们上传。csv扩展。

//* Register activation and deactivation hooks
register_activation_hook( __FILE__ , \'wpse_258192_activation\' );
register_deactivation_hook( __FILE__ , \'wpse_258192_deactivation\' );

//* Add upload_csv capability to administrator role
function wpse_258192_activation() {
  $admin = get_role( \'administrator\' );
  $admin->add_cap( \'upload_csv\' );
}

//* Remove upload_csv capability from administrator role
function wpse_258192_deactivation() {
  $admin = get_role( \'administrator\' );
  $admin->remove_cap( \'upload_csv\' );
}

//* Add filter to check filetype and extension
add_filter( \'wp_check_filetype_and_ext\', \'wpse_258192_check_filetype_and_ext\', 10, 4 );

//* If the current user can upload_csv and the file extension is csv, override arguments - edit - "$pathinfo" changed to "pathinfo"
function wpse_258192_check_filetype_and_ext( $args, $file, $filename, $mimes ) {
  if( current_user_can( \'upload_csv\' ) && \'csv\' === pathinfo( $filename )[ \'extension\' ] ){
    $args = array(
      \'ext\'             => \'csv\',
      \'type\'            => \'text/csv\',
      \'proper_filename\' => $filename,
    );
  }
  return $args;
}

SO网友:dee_ell

如果你想要一个临时的快速简单的解决方案,你可以在你的wp配置中允许未过滤的上传。php。

define(\'ALLOW_UNFILTERED_UPLOADS\', true);
这一行可能不应该留在您的配置中。php,但如果您只想通过CSV导入woocommerce产品一次,那么这是一个很容易解决的问题。

SO网友:Dave Romsey

默认情况下,WordPress阻止.csv 文件上载。这个mime_types 过滤器将允许您添加.csv 要上载的文件或任何其他文件:

add_filter( \'mime_types\', \'wpse_mime_types\' );
function wpse_mime_types( $existing_mimes ) {
    // Add csv to the list of allowed mime types
    $existing_mimes[\'csv\'] = \'text/csv\';

    return $existing_mimes;
}

相关推荐

Extra "uploads" added in path

虽然这与高级自定义字段相关,但此函数使用所有本机WP特性,因此我认为在这里询问这一点是合适的。路径中的额外“/上传/”来自何处?在后端,我看到了上传文件的正确链接(domain.com/wp-content/member-files/name.pdf),但在前端,URL在路径(domain.com/wp-content/uploads/member-files/name.pdf)中显示了额外的“/uploads/”,当然为文件生成了404。// file upload to custom location