it-swarm.com.de

W3 Total Cache, RackSpace Cloud-Dateien und Erzwingen von Downloads

Ich verwende die CDN-Verbindung von W3 Total Cache zu RackSpace CloudFiles, um mehrere hundert Mediendateien bereitzustellen. Mein Ziel ist es, die Dateien im Browser des Benutzers herunterzuladen und nicht zu streamen. Gemäß der CloudFiles-Dokumentation (http://docs.rackspacecloud.com/files/api/v1/cf-devguide-20111115.pdf) kann ich die Content Disposition-Header festlegen.

Weiß jemand, wie das über W3 Total Cache oder vielleicht damit gemacht werden kann? Oder kennen Sie eine andere Möglichkeit, Downloads für Dateien zu erzwingen, die über das CDN bereitgestellt werden?

4
Jonathan Wold

Dies kann durch Hinzufügen eines benutzerdefinierten Filters in eine einfache Aufgabe unterteilt werden.

Sie müssen der _send_request-Methode in der CF_Http-Klasse in Zeile 1283 cloudfiles_http.php Folgendes hinzufügen.

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

Auf diese Weise können Sie über ein Plugin auf die Header zugreifen, anstatt umfangreiche Änderungen an W3TC vorzunehmen.

Innerhalb Ihres Plugins können Sie eine Funktion wie diese erstellen:

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

Dies fügt den richtigen Header hinzu, um den Download zu erzwingen, wenn W3TC ein Objekt mit einer Dateierweiterung abruft, die in der Regex oben aufgeführt ist. Auf diese Weise können Sie steuern, welche Dateien im Browser bereitgestellt werden und welche Dateien heruntergeladen werden müssen.

Sie können dies in einem Plugin ausprobieren, das ich für Sie erstellt habe. Dies muss möglicherweise etwas verbessert werden, aber so sollten Sie sich meiner Meinung nach dem Problem nähern.

Laden Sie das Plugin hier herunter: http://3-3.me/K4SL

Als letzte Anmerkung wird hiermit offensichtlich der Kern des W3TC-Plugins bearbeitet (allerdings mit nur einer Codezeile). Dies ist keine bewährte Methode, funktioniert aber für Sie. Dies bedeutet, dass jedes Upgrade Ihre Änderungen überschreibt. Es kann ratsam sein, das Plugin umzubenennen (einen Fork auf Ihrem System zu erstellen), damit WordPress nicht versucht, es zu aktualisieren.

Hoffe das hilft dir weiter!

6
Brian Fegter