2012-01-11 14 views
7

Ho bisogno di inviare un file memorizzato in S3 attraverso la mia applicazione di rota ospitata su heroku. Non riesco a utilizzare un reindirizzamento all'URL del file su S3 poiché desidero inviare una sitemap che deve essere pubblicata dallo stesso dominio dei collegamenti interni.Proxy un file da S3 con Heroku e Rails

Idealmente, utilizzerei una sorta di metodo proxy per inviare il file tramite l'app per rails, almeno, posso scaricare il file nella directory tmp di heroku e inviarlo dopo.

Vorrei anche inviare il giusto tipo di contenuto per il file.

Sai come posso ottenerlo? Quale sarà il modo migliore?

C'è un app cremagliera che sta facendo questo, ma non sono sicuro di come riprodurre in Rails, vedere il codice here

Grazie per il vostro aiuto

+0

Che cosa intendete per "inviare un file"? A chi lo stai mandando? Stai permettendo a un utente di scaricarlo o stai facendo da proxy per un altro servizio per scaricarlo tramite la tua app di Heroku? – iwasrobbed

+1

Voglio agire come proxy per un altro servizio (S3) per scaricarlo tramite la mia app di Heroku. –

+0

Heroku ha un timeout di richiesta di 30 secondi quindi non sono sicuro di poter utilizzare in modo affidabile un server Heroku come proxy. – iwasrobbed

risposta

3

Ecco come si presenta:

blob = AWS::S3::S3Object.value(filename, bucketname) 
send_data(blob, 
      { :type => 'image/jpg, 
      :disposition => 'inline' }) 

il tipo può essere immagine/jpg, immagine/gif, ecc.

+0

Questa è una possibilità ma preferirei trovare una sorta di streaming, se possibile. Inoltre, anche se il file è memorizzato su S3, è su un URL pubblico, quindi non ho bisogno di usare la libreria S3 per ottenere il file, non sono sicuro se c'è un motivo per scegliere di ottenere il file dalla lib di S3 o direttamente dall'URL? –

+0

beh, se non si desidera reindirizzare all'URL s3, l'applicazione rails dovrà servire direttamente l'immagine. Potresti essere in grado di eseguirne il flusso usando il costrutto render: text => proc {} ma se tieni coinvolta una cache (vernice o memcache), basta tirarla da s3 e inviarla insieme è una soluzione ragionevole. – elijah

+0

Non sono sicuro di come usare 'render: text => proc {}' per lo streaming del file. Inoltre vorrei impostare il contenuto/tipo in modo dinamico dal file su S3. Hai qualche idea con quello? Grazie per il vostro aiuto. –

Problemi correlati