将.kml文件上传到WordPress

4
我可以帮您翻译成中文,内容涉及IT技术。以下是翻译的结果,请注意保留HTML格式和标签:

我正在尝试将 .kml 文件上传到 WordPress。曾经有一次我成功实现了,但最新的 WordPress 更新好像导致它无法使用。

我正在使用以下函数:

function my_myme_types($mime_types){
$mime_types['kml'] = 'application/vnd.google-earth.kml+xml'; //Adding kml extension
$mime_types['kmz'] = 'application/vnd.google-earth.kmz'; //Adding kmz files
return $mime_types;
}
add_filter('upload_mimes', 'my_myme_types', 1, 1);

上传时出现以下错误:

"很抱歉,由于安全原因,不允许上传此文件类型。"

2个回答

15
为了使KML/KMZ文件得到正确支持,您需要使用text/xmlapplication/zip,因为WordPress会将声明的MIME类型与“真实”检测到的MIME类型进行比较(有关详细信息,请参见wp-includes/functions.php中的wp_check_filetype_and_ext函数)。
function add_upload_mimes($mimes) {
  $mimes['kml'] = 'text/xml';
  $mimes['kmz'] = 'application/zip';
  return $mimes;
}
add_filter('upload_mimes', 'add_upload_mimes');

更新 (2019-02-28) : kml被识别为text/xml而不是application/xml,相应地更改代码应该解决下面评论中描述的问题。


这在5.1版本中已经不再起作用了。一直在绞尽脑汁地寻找解决方法。 - James
在我的WordPress 5.0.3中,解决方案是使用mime类型application/xml。 - jiappo
谢谢2019年的更新 :) text/xml 终于可以工作了! - scooterlord

1
这可能与最新的WordPress更新有关:
尝试上传xml文件时,出现相同的错误消息,更新upload_mimes WordPress过滤器钩子不起作用,使用一些文件上传或mime类型管理插件也是如此,这些插件基本上使用相同的过滤器钩子。
解决方案:更新wp-config.php并添加以下行 define('ALLOW_UNFILTERED_UPLOADS',true); 然后在上传文件后删除此行以避免潜在的安全风险。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接