[英]Rails AWS S3: Downloading File and Storing in Temp Folder
我正在嘗試從我的AWS存儲桶下載文件並將其存儲在我的temp文件夾中。
下面的代碼返回此錯誤:OpenURI :: HTTPError(301永久移動(無效的位置URI)):
@filename是存儲區中的文件名(包括擴展名),為字符串。
S3 = AWS::S3.new(
:access_key_id => ENV["AWS_ACCESS_KEY_ID"],
:secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"]
)
BUCKET = S3.buckets["name_of_bucket"]
File.open(Rails.root.join("tmp",@filename), "wb") do |file|
file.write open(BUCKET.objects[@filename].url_for(:read)).read
end
到目前為止,這是我發現的內容:
puts BUCKET.objects['name_of_bucket']
puts BUCKET.objects['name_of_bucket'].url_for(:read)
第一個BUCKET調用返回正確的對象,第二個返回此對象:
https://ekohotstorage.s3-us-west-2.amazonaws.com/location_info
當您轉到該網址時,這就是返回的內容
The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
此( http://www.sitefinity.com/developer-network/forums/set-up-installation/amazon-s3---必須通過指定端點使用 )指出“ S3,如果您創建的存儲桶不是“美國標准”,則不能在存儲桶地址中使用路徑樣式語法。”
但是,我已經檢查了這個存儲桶,它是def。 美國標准地區。
編輯:
我很傻 我讀過,AWS默認值為美國標准。 但是,西方不是標准的,東方是標准的,所以我想它不會默認為美國標准。
在解決愚蠢之后
S3 = AWS::S3.new(
:access_key_id => ENV["AWS_ACCESS_KEY_ID"],
:secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"],
:region => "us-east-1"
)
我現在收到此錯誤:
OpenURI::HTTPError (404 Not Found)
但是,從以下代碼創建的url確實會指向聲音文件。
BUCKET.objects['name_of_bucket'].url_for(:read)
因此,問題必須在於
File.open(Rails.root.join("tmp",@filename), "wb") do |file|
file.write open(BUCKET.objects[@filename].url_for(:read)).read
end
有什么想法嗎?
這里似乎發生了兩件事。 首先,美國標准地區實際上是弗吉尼亞州或俄勒岡州。 您只需要意識到您已被重定向,因為Amazon已為您的存儲桶選擇了俄勒岡州。 當前在這里解釋區域的URL:
http://docs.aws.amazon.com/AmazonS3/latest/dev/LocationSelection.html
第二件事是重定向。 連接時,您將被重定向到俄勒岡州,因為您將看到典型的S3終結點是延遲DNS中最接近的終結點。 以后在弗吉尼亞州進行硬編碼時,您看不到俄勒岡州的水桶。
亞馬遜這里有一些有關S3如何重定向您以及如何處理它的文檔。
http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTRedirect.html
由於您使用的是工具包而不是API,因此在ruby forge或Amazon文檔中沒有看到任何特別的內容來說明為什么不遵循重定向。 似乎其他使用AWS ruby SDK的人去年都有這個問題。 它可能在較新版本中已修復。
我要參考的文檔在這里:
http://amazon.rubyforge.org/doc/
亞馬遜似乎在這里有更新的文檔:
http://docs.aws.amazon.com/AWSRubySDK/latest/
另一件事是,我看到有關重定向URL格式錯誤的投訴。 雖然我無法復制該行為,但我將嘗試將請求發送到俄勒岡端點,以查看是否可以解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.