2010-04-11 17 views
17

Ho creato questo sito per il mio amico e l'ho caricato su un bucket Amazon S3 (http://ballard26.s3.amazonaws.com/index.html) e quando vado su quel sito la pagina non si carica correttamente e non ho idea del perché. Qualche idea?Amazon S3 non sta servendo i file correttamente

Ad esempio, stylesheet.css non viene caricato correttamente. Se vai a http://ballard26.s3.amazonaws.com/stylesheet.css, scarica il file invece di caricarlo come CSS.

+2

Avrete bisogno di dirci cosa c'è che non va. Cosa ti aspetti di vedere e in che modo è diverso da ciò che vedi realmente? – ChrisF

risposta

25

Controllare i tipi mime (intestazione del tipo di contenuto HTTP) sui file caricati. S3 non li imposta sempre correttamente. Potrebbe essere necessario impostarli sulla chiamata dell'API di caricamento. Alcune librerie di upload lo faranno per te.

Se i tipi di mime non sono corretti quando il file viene scaricato dal browser da S3 se il tipo mime non è impostato correttamente, non verrà sempre visualizzato correttamente.

+0

o ... Il tipo mime può essere corretto in quanto esiste anche un'intestazione disposizione-contenuto impostata su "allegato" – pinoyyid

+0

Un ottimo modo per visualizzare rapidamente tutte le intestazioni è utilizzare l'arricciatura. Ad esempio: $ curl -I http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css - assicurati di aggiungere "-I" in modo che le intestazioni siano visualizzate e non il contenuto del doc. –

4

Suppongo che non abbia specificato o impostato correttamente il tipo MIME del file durante il caricamento del file. Di conseguenza, per impostazione predefinita è binary/octet-stream.

Quando si carica la pagina, il browser presume che il foglio di stile specificato non sia un file CSS, poiché viene fornito con un tipo di contenuto diverso da text/css e pertanto non applica il foglio di stile.

2

Ho avuto lo stesso problema in IE a causa del tipo di contenuto non corretto dei nostri file CSS/JS.

Se si utilizza Ruby e la gemma AWS, utilizzare il codice in questo modo:

s3 = Aws::S3Interface.new($s3[:s3_access_key_id],$s3[:s3_secret_access_key],{:multi_thread => true}); 
s3.put($s3[:s3_bucket],s3_path,file[:tempfile].read,{'x-amz-acl' => 'public-read', 'content-type' => 'text/css' }) 

Avviso la diversa sintassi per la S3 Metadata:

'content-type' => 'text/css' 
12

file CSS predefinito a un tipo MIME octet/binary. Per correggere ciò, accedi alla Console di gestione AWS, vai alla sezione Amazon S3 e trova il bucket pertinente. Individua il file CSS e seleziona Proprietà. Sotto metadati, impostare la chiave Content-Type al valore: text/css

Se si utilizza Panic Transmit app per Mac OS X, è possibile impostare un Carica personalizzato di intestazione per i file CSS di Content-Type: text/css che si applicheranno il tipo MIME corretto ogni volta che si caricare un file, eliminando la necessità di impostarlo manualmente nella console ogni volta.

Ulteriori informazioni su questo è in Adam Wilcox blog post.

+2

Volevo solo aggiungere che la risposta di trasmissione era ciò che ha risolto per me. Un file CSS stava attivando ottetto/binario per qualche motivo, anche se tutti gli altri stavano passando correttamente, cosa che non riesco ancora a spiegare. Forzare il problema in Transmit ha salvato il mio gluteo. – jerclarke