簡體   English   中英

Amazon S3存儲桶虛擬托管

[英]amazon s3 virtual hosting of bucket

我已使用回形針在s3上上傳了一個文件。文件上傳過程正常。.現在我想下載它。 在我的模型中,我已經設置了:s3_host_alias ..因為文件是私有的..因此,如果我嘗試使用回形針url方法來獲取文件...這:s3_host_alias我訪問被拒絕的錯誤...

如果我使用的是S3Object.url_for方法,則URL返回為s3.amazonaws.com/mybucket/path_of_file

我不想THT s3.amazonaws.com要顯示的URL,這樣使用的:s3_host_alias在我的模型,並創建了一個CNAME inmy DNS服務器......現在,如果我直接使用@object.url那么它給出了正確的URL但會引發拒絕訪問錯誤。 因為我想access_key和簽名沒有通過。

有沒有一種方法可以通過使用規范的URL使用回形針從s3中獲取私有文件。

我不使用回形針,但是可以,您可以使用虛擬主機名簽署S3請求。

我在使用Paperclip和AWS :: S3 gem時遇到了這個問題。 回形針可以很好地處理未經身份驗證的請求。 但是回退到AWS :: S3來生成經過身份驗證的URL並沒有使用S3主機別名。

您可以在連接時將AWS :: S3服務器選項傳遞給我,但是我不需要或希望僅通過連接來獲取URL。 我也看不到通過配置設置它的方法(因此它會在連接外部應用)。 即使瀏覽源代碼,它似乎也是不可配置的。

因此,我創建了一個猴子補丁。 我的Ruby-fu(也許還有我的OO-fu)並不是很高,所以也許有更好的方法可以做到這一點,但是它可以滿足我的需要。 基本上,我在選項哈希上傳遞url_for :s3_host_alias參數,然后猴子補丁使用該參數(如果傳遞)。 如果通過,則還必須從生成的路徑中刪除存儲桶。

所以....

您可以創建1行文件RAILS_ROOT/initializers/load_patches.rb ,以將所有補丁加載到RAILS_ROOT/lib

Dir[File.join(Rails.root, 'lib', 'patches', '**', '*.rb')].sort.each { |patch| require(patch) }

然后使用以下代碼創建文件RAILS_ROOT/lib/patches/aws.rb

http://pastie.org/1622881

您可以通過以下幾行來調用經過身份驗證的url(Configuration是用於存儲,natch和配置值的自定義類):

AWS::S3::S3Object.url_for(media.path(style || media.default_style), media.bucket_name, :expires_in => expires_in, :use_ssl => false, :s3_host_alias => Configuration.s3_host_alias)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM