簡體   English   中英

Rails AWS S3:下載文件並存儲在臨時文件夾中

[英]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.

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