2012-01-11 33 views
7

Potrzebuję wysłać plik przechowywany w S3 za pośrednictwem mojej aplikacji railsowej hostowanej na heroku. Nie mogę użyć przekierowania do adresu URL pliku na S3, ponieważ chcę wysłać mapę witryny, która powinna być obsługiwana z tej samej domeny, co linki wewnątrz.Proxy plik z S3 z Heroku i Railsami

Idealnie, chciałbym użyć jakiejś metody proxy, aby wysłać plik przez aplikację rails, przynajmniej mogę pobrać plik w katalogu tmp z Heroku i wysłać go później.

Wysyłam również odpowiedni typ zawartości do pliku.

Czy wiesz, jak mogę to osiągnąć? Jaki będzie najlepszy sposób?

Jest to aplikacja stojak który robi to, ale nie jestem pewien, jak odtworzyć go Rails zobaczyć kod here

dzięki za pomoc

+0

Co masz na myśli, mówiąc o "wysłać plik"? Do kogo go wysyłasz? Czy pozwalasz użytkownikowi pobrać go lub działasz jako serwer proxy innej usługi, aby pobrać go za pomocą aplikacji Heroku? – iwasrobbed

+1

Chcę działać jako proxy dla innej usługi (S3), aby pobrać ją za pośrednictwem mojej aplikacji Heroku. –

+0

Heroku ma 30-sekundowy limit czasu żądania, więc nie jestem pewien, czy możesz niezawodnie używać serwera Heroku jako serwera proxy. – iwasrobbed

Odpowiedz

3

Wygląda to tak:

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

Typem może być image/jpg, image/gif, itp.

+0

Jest to możliwe, ale wolałbym znaleźć jakikolwiek streaming, jeśli to możliwe. Ponadto, nawet jeśli plik jest przechowywany na S3, znajduje się na publicznym adresie URL, więc nie muszę używać biblioteki S3, aby pobrać plik, nie jestem pewien, czy istnieje powód, aby wybrać plik z biblioteki S3 lib lub bezpośrednio według adresu URL? –

+0

cóż, jeśli nie chcesz przekierowywać do URL-a s3, aplikacja rails będzie musiała wyświetlić obraz bezpośrednio. Możesz go przesyłać strumieniowo za pomocą konstrukcji render: text => proc {}, ale jeśli masz włączoną pamięć podręczną (lakier lub memcache), wystarczy wyciągnąć ją z s3 i wysłanie jej razem jest rozsądnym rozwiązaniem. – elijah

+0

Nie wiem, jak używać 'render: text => proc {}' do streamowania pliku. Również chciałbym ustawić zawartość/typ dynamicznie z pliku na S3. Czy masz jakiś pomysł? Dzięki za pomoc. –