2012-01-11 34 views
7

我需要通過Heroku上託管的我的Rails應用程序發送存儲在S3中的文件。 我不能使用重定向到S3上的文件的URL,因爲我想發送一個站點地圖,該站點地圖應該從與內部鏈接相同的域中提供。使用Heroku和Rails代理S3中的文件

理想情況下,我會使用某種代理方法通過rails應用程序發送文件,至少,我可以將文件下載到heroku的tmp目錄中併發送。

我也會發送正確的文件內容類型。

你知道我該如何實現它嗎?什麼將是最好的方式?

還有這是做一個機架應用程序,但我不知道如何重現它在Rails中,看到的代碼here

感謝您的幫助

+0

你是什麼意思的「發送文件」?你要把它發給誰?您是讓用戶下載它還是代理其他服務通過您的Heroku應用下載它? – iwasrobbed 2012-01-11 02:13:59

+1

我想充當另一個服務(S3)的代理,通過我的Heroku應用下載它。 – 2012-01-11 08:16:53

+0

Heroku有30秒的請求超時,所以我不確定你能否可靠地使用Heroku服務器作爲代理。 – iwasrobbed 2012-01-11 15:02:56

回答

3

它看起來像這樣:

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

類型可以是圖片/ jpg,圖片/ gif等

+0

這是一種可能性,但如果可能,我寧願找到某種流式。另外,即使文件存儲在S3上,它也在公共URL上,所以我不需要使用S3庫來獲取文件,也不知道是否有理由選擇從S3庫中獲取文件或直接由URL? – 2012-01-11 20:29:27

+0

好吧,如果你不想重定向到s3網址,rails應用程序將不得不直接提供圖片。您可以使用render:text => proc {}構造來對其進行流式處理,但是如果獲得緩存(varnish或memcache),只需將其從s3中拉出併發送即可,這是一個合理的解決方案。 – elijah 2012-01-11 20:37:11

+0

我不知道如何使用'render:text => proc {}'來傳輸文件。另外我想從S3上的文件動態設置內容/類型。你有這個想法嗎? 感謝您的幫助。 – 2012-01-11 22:30:46

相關問題