W3 Total Cache, RackSpace Cloud Files y Forzar descargas [cerrado]

4

Estoy usando la conexión CDN de W3 Total Cache a RackSpace CloudFiles para servir a cientos de cientos de archivos multimedia. Mi objetivo es conseguir que los archivos se descarguen en el navegador del usuario, en lugar de transmitirlos. De acuerdo con la documentación de CloudFiles (http://docs.rackspacecloud.com/files/api/v1/cf-devguide-20111115.pdf) puedo configurar los encabezados de Disposición de contenido.

¿Alguien sabe cómo se puede hacer esto a través de W3 Total Cache o, quizás, alrededor de él? O, alternativamente, ¿conoce alguna otra forma de forzar las descargas de archivos servidos a través de CDN?

    
pregunta Jonathan Wold 14.02.2012 - 13:35

1 respuesta

6

Esto se puede dividir en una tarea simple agregando un filtro personalizado.

Deberá agregar lo siguiente al método _send_request dentro de la clase CF_Http en cloudfiles_http.php line 1283.

$headers = $this->_make_headers($hdrs);
//Add this line below
$headers = apply_filters('cloudfiles_headers', $headers, $url_path, $method);

Esto le dará acceso a los encabezados desde un complemento en lugar de realizar grandes ediciones en W3TC.

Dentro de su complemento, puede crear una función como esta:

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;
}

Esto agregará el encabezado adecuado para forzar la descarga si W3TC está recuperando un objeto con una extensión de archivo enumerada en la expresión regular anterior. Esta es una buena manera de controlar qué archivos se sirven en el navegador y qué archivos deben descargarse.

Puede probar esto en un complemento que creé para su conveniencia. Esto puede necesitar algunos ajustes, pero así es como creo que deberías abordar el problema.

Descargue el complemento aquí: enlace

Como nota final, esto obviamente edita el núcleo del complemento W3TC (aunque solo con una línea de código). Esta no es una buena práctica, pero funcionará para usted. Esto significa que cualquier actualización anulará sus cambios. Puede ser prudente cambiar el nombre del complemento (crear un fork en su sistema) para que WordPress no intente actualizarlo.

Espero que esto te ayude!

    
respondido por el Brian Fegter 24.02.2012 - 05:12

Lea otras preguntas en las etiquetas