W3总缓存、Rackspace云文件和强制下载

时间:2012-02-14 作者:Jonathan Wold

我正在使用W3 Total Cache与RackSpace CloudFiles的CDN连接来提供数百个媒体文件。我的目标是让文件在用户的浏览器中下载,而不是流式下载。根据CloudFiles文档(http://docs.rackspacecloud.com/files/api/v1/cf-devguide-20111115.pdf)我可以设置内容处置标题。

是否有人知道如何通过W3 Total Cache或使用它来实现这一点?或者,您知道通过CDN强制下载文件的另一种方法吗?

1 个回复
最合适的回答,由SO网友:Brian Fegter 整理而成

通过添加自定义筛选器,可以将其分解为一个简单的任务。

您需要将以下内容添加到cloudfiles\\u Http中CF\\u Http类中的\\u send\\u request方法中。php第1283行。

$headers = $this->_make_headers($hdrs);
//Add this line below
$headers = apply_filters(\'cloudfiles_headers\', $headers, $url_path, $method);
这将允许您从插件访问标题,而不是对W3TC进行大量编辑。

在插件中,您可以创建如下函数:

add_filter(\'cloudfiles_headers\', \'wpse_42273_cloudfiles_headers\', 0, 3);
function wpse_42273_cloudfiles_headers($headers, $url_path, $method){
    if($method != \'GET\')
         return $headers;
    if(preg_match_all(\'~^.*/(.+\\.(jpg|jpeg|png|gif|pdf|doc|docx|csv))$~i\', $url_path, $matches)){
        $filename = $matches[1][0];
        $headers[] = "Content-Disposition: attachment; filename=$filename";
    }
    return $headers;
}
如果W3TC正在获取一个具有上面正则表达式中列出的文件扩展名的对象,这将添加适当的头以强制下载。这是一种控制浏览器中提供哪些文件以及必须下载哪些文件的好方法。

您可以在我为方便您而创建的插件中尝试这一点。这可能需要一些调整,但我觉得你应该这样处理这个问题。

在此处下载插件:http://3-3.me/K4SL

最后一点,这显然是对W3TC插件核心的编辑(尽管只有一行代码)。这不是一个最佳实践,但它对您很有用。这意味着任何升级都将覆盖您的更改。重命名插件(在系统上创建一个fork)可能比较谨慎,这样WordPress就不会尝试更新它。

希望这对你有帮助!

结束

相关推荐

带有WordPress的CDN选项,包括支持插件?

有什么问题options for Content Distribution Networks for use with WordPress? 我想了解他们的客观利弊,他们的相关插件或其他利用它们的方式,他们的相对定价,他们适当的客户档案/场景/用例,他们使用过的项目(如果你知道的话),以及任何其他相关信息。This is a community wiki 因此,请仅为每个答案提供一个CDN选项,请不要重复答案。如果您有关于已列出CDN的内容,请编辑答案或添加评论。和please vote up the

W3总缓存、Rackspace云文件和强制下载 - 小码农CODE - 行之有效找到问题解决它

W3总缓存、Rackspace云文件和强制下载

时间:2012-02-14 作者:Jonathan Wold

我正在使用W3 Total Cache与RackSpace CloudFiles的CDN连接来提供数百个媒体文件。我的目标是让文件在用户的浏览器中下载,而不是流式下载。根据CloudFiles文档(http://docs.rackspacecloud.com/files/api/v1/cf-devguide-20111115.pdf)我可以设置内容处置标题。

是否有人知道如何通过W3 Total Cache或使用它来实现这一点?或者,您知道通过CDN强制下载文件的另一种方法吗?

1 个回复
最合适的回答,由SO网友:Brian Fegter 整理而成

通过添加自定义筛选器,可以将其分解为一个简单的任务。

您需要将以下内容添加到cloudfiles\\u Http中CF\\u Http类中的\\u send\\u request方法中。php第1283行。

$headers = $this->_make_headers($hdrs);
//Add this line below
$headers = apply_filters(\'cloudfiles_headers\', $headers, $url_path, $method);
这将允许您从插件访问标题,而不是对W3TC进行大量编辑。

在插件中,您可以创建如下函数:

add_filter(\'cloudfiles_headers\', \'wpse_42273_cloudfiles_headers\', 0, 3);
function wpse_42273_cloudfiles_headers($headers, $url_path, $method){
    if($method != \'GET\')
         return $headers;
    if(preg_match_all(\'~^.*/(.+\\.(jpg|jpeg|png|gif|pdf|doc|docx|csv))$~i\', $url_path, $matches)){
        $filename = $matches[1][0];
        $headers[] = "Content-Disposition: attachment; filename=$filename";
    }
    return $headers;
}
如果W3TC正在获取一个具有上面正则表达式中列出的文件扩展名的对象,这将添加适当的头以强制下载。这是一种控制浏览器中提供哪些文件以及必须下载哪些文件的好方法。

您可以在我为方便您而创建的插件中尝试这一点。这可能需要一些调整,但我觉得你应该这样处理这个问题。

在此处下载插件:http://3-3.me/K4SL

最后一点,这显然是对W3TC插件核心的编辑(尽管只有一行代码)。这不是一个最佳实践,但它对您很有用。这意味着任何升级都将覆盖您的更改。重命名插件(在系统上创建一个fork)可能比较谨慎,这样WordPress就不会尝试更新它。

希望这对你有帮助!

相关推荐

使用带有安全回调的CDN脚本的WP入队脚本

我想包括来自远程CDN的几个脚本和样式。。。在本例中,是引导和类似文件,但我想以回调的形式提供一个安全网,以防CDN由于某种原因停机。。。我想添加一些代码,但我真的不知道如何处理这个问题。。。Here is an example of a regular wp_enqueue_script i currently use:wp_enqueue_script( \'bootstrap\', \'http://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstr