2013-12-23 17 views
5

Ich habe neue Musik-Anwendung erstellt und ich speichere alle MP3-Dateien auf Amazon S3. Bevor ich zu S3 ging, habe ich sie auf dem Server-Dateisystem selbst gespeichert. Es wurde verwendet, um Dateien zwischenzuspeichern und beim wiederholten Neuladen von Seitendateien wurde nicht vom Server heruntergeladen. Aber nach dem Wechsel zu S3, jedes Mal, wenn ich Seite lade, lädt es Dateien von S3 herunter. Das verlangsamt nicht nur meine App, sondern jede Anfrage an S3 ist Geld. Ich habe eine Dokumentation über die Cache-Kontrolle gefunden und sie alle ausprobiert, aber keinen Erfolg. Ich könnte hier etwas verpassen. Jede Hilfe wird geschätzt. Vielen Dank.Amazon S3 Cache-Audiodateien

Hier ist mein Code zum Hochladen von MP3-Dateien auf S3. Ich verwende CarrierWave mit Rails.

CarrierWave.configure do |config| 
    config.fog_credentials = { 
     :provider    => 'AWS', 
     :aws_access_key_id  => MyAppConfig.config['aws']['aws_access_key'], 
     :aws_secret_access_key => MyAppConfig.config['aws']['aws_secret_key'], 
    } 
    config.fog_directory = MyAppConfig.config['aws']['aws_bucket_name'] 
    config.fog_public  = false 
    config.storage = :fog 
    config.fog_attributes = {'Cache-Control'=>'max-age=315576000'} 
end 
+0

"es" lädt Dateien von S3 herunter ... was ist "es?" Der Browser? Oder der Server? Versuchen Sie, S3 als Dateisystem zu verwenden? –

+0

"it" = "Browser". – pramodtech

+0

Verwenden Sie signierte URLs? –

Antwort

3

Wenn Sie signierte URLs verwenden, von denen Sie sagen, dass Sie in den Kommentaren sind, und diese signierten URLs nicht wiederverwenden, dann gibt es keine Möglichkeit, diese Anfragen zwischenzuspeichern.

Amazon Web Services kann das interne Cache-System Ihres Webbrowsers nicht überschreiben. Wenn zwei URIs wie bei signierten URLs eindeutig sind, behandelt Ihr Webbrowser sie als zwei verschiedene Ressourcen im Internet.

Zum Beispiel nehmen wir:

http://www.example.com/song1.mp3 
http://www.example.com/song2.mp3 

Dies sind zwei diskrete URIs. Auch wenn song1.mp3 und song2.mp3 die gleichen HTTP-Antwortheader Etag undhaben, sind sie immer noch zwei verschiedene Ressourcen.

Das gleiche gilt, wenn wir nur ihre Abfrage-Strings ändern:

http://www.example.com/song1.mp3?a=1&b=2&c=3 
http://www.example.com/song1.mp3?a=1&b=2&c=4 

Dies sind noch zwei diskrete URIs. Sie werden sich nicht zum Zwecke des Cachings referenzieren.Dies ist das Prinzip hinter der Verwendung von query strings to override caching.

Keine Menge an Fiedeln mit HTTP-Headern wird Sie jemals das Cache-Verhalten erhalten, das Sie suchen.

+0

Wenn Sie mir helfen können, signierte URL vs unsigned URL zu verstehen, dann werde ich wahrscheinlich entscheiden können, ob ich für unsigned URL gehen kann, die wie Sie mein Problem lösen sollten. – pramodtech

+0

AWS-signierte URLs sehen aus wie '/song1.mp3? Expires = 123 & Signature = abc' und werden bei Bedarf generiert. Wenn Sie für jede Anforderung signierte URLs erstellen, werden diese nicht von jedem im Cache gespeichert. Sie haben zwei Möglichkeiten, das Objekt zwischenzuspeichern: 1) machen Sie die Lese-Richtlinie des Objekts public, so dass jeder über '/ song1.mp3' ohne die Abfrage-Zeichenkette darauf zugreifen kann, 2) erstellen Sie ein System zum Speichern und Verwalten der signierten URLs Derselbe Benutzer sieht dieselbe exakt signierte URL '/song1.mp3? Expires = 123 & Signature = abc' mehrere Male (ein viel größerer Job). –

2

Werfen Sie einen Blick auf http://www.bucketexplorer.com/documentation/amazon-s3--how-to-set-cache-control-header-for-s3-object.html

Set Cache-Control für bereits hochgeladene Datei auf S3-Update-Metadaten mit:

1) Run Bucket Explorer und melden Sie sich mit Ihren Zugangsdaten.

2) Nachdem Sie alle Buckets aufgelistet haben, wählen Sie ein beliebiges S3 Bucket aus.

3) Es werden alle Objekte des ausgewählten S3-Buckets aufgelistet.

4) Wählen Sie eine Datei und klicken Sie mit der rechten Maustaste auf die Objekte und wählen Sie "Update Metadata" -Option.

5) Fügen Sie Schlüssel und Wert in den Metadatenattributen hinzu. Enter Key: "Cache-Control" mit Wert: "max-age = (Zeit, auf die in Sekunden von Ihrem Cache auf Ihr Objekt zugegriffen werden soll")

6) Klicken Sie auf die Schaltfläche Speichern. Es aktualisiert Metadaten als Cache-Control für alle ausgewählten S3-Objekte.

Example to set max-age: For time limit of 15 days = 3600 * 24 * 15 = 1296000 sec. Set Key = “Cache-Control” value = “max-age=1296000” 

Hinweis: Wenn Objekt HTML-Datei, stellen Sie Schlüssel: „Cache-Control“ und Wert: max-age = (Zeit, in der Sie Ihr Objekt will aus dem Cache in Sekunden zugegriffen werden), muss -revalidate "dh Key: "Cache-Control" -Wert: max-age = "2592000, muss 30 Tage lang erneut validiert werden". Die Zeichenfolge "muss erneut validieren" muss nach der Zeit in der Sekunde als Wert hinzugefügt werden.

1

Angenommen, Sie haben die Header der Cache-Steuerelemente richtig gesetzt und Sie verwenden signierte URLs, als Sie die signierte URL für eine bestimmte Datei behalten und die exakt gleiche URL beim nachfolgenden Laden der Seite erneut rendern müssen.

Wenn Sie die Header für die Cache-Steuerung nicht festgelegt haben oder möchten, dass sie sich ändern, je nachdem, wer die Anfrage stellt, können Sie sie festlegen, bevor Sie Ihre URL mit der folgenden Signatur signieren: &response-cache-control=value oder &response-expires=value.