Je tente de télécharger un fichier à partir de mon compartiment AWS et de le stocker dans mon dossier temporaire.Rails AWS S3: Téléchargement de fichier et stockage dans le dossier temporaire
Le code ci-dessous renvoie cette erreur: openURI :: HTTPError (301 Déplacé de manière permanente (non valide Emplacement URI)):
@filename est le nom du fichier dans le seau, y compris l'extension, comme une chaîne.
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
Voici ce que j'ai trouvé à ce jour:
puts BUCKET.objects['name_of_bucket']
puts BUCKET.objects['name_of_bucket'].url_for(:read)
Le premier appel SEAU retourne l'objet correct, le second renvoie cette:
https://ekohotstorage.s3-us-west-2.amazonaws.com/location_info
Quand vous allez à cette url c'est ce qui est retourné
The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
Ceci (http://www.sitefinity.com/developer-network/forums/set-up-installation/amazon-s3---must-be-addressed-using-the-specified-endpoint) indique "il y a une limitation dans S3, où si vous créez un compartiment qui n'est pas" US Standard ", vous ne pouvez pas utiliser la syntaxe de style de chemin dans l'adresse de compartiment."
Cependant, j'ai vérifié ce seau et c'est déf. Région US Standard.
Éditer:
Je suis stupide; J'avais lu que la valeur par défaut d'AWS était US Standard. Mais l'ouest n'est pas standard, l'est est donc je suppose qu'il ne fait pas défaut à US Standard.
Après la fixation de cette folie avec
S3 = AWS::S3.new(
:access_key_id => ENV["AWS_ACCESS_KEY_ID"],
:secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"],
:region => "us-east-1"
)
Je reçois maintenant cette erreur:
OpenURI::HTTPError (404 Not Found)
Cependant, l'url créé à partir du code ci-dessous ne conduit au fichier son.
BUCKET.objects['name_of_bucket'].url_for(:read)
Donc, la question doit se trouver avec
File.open(Rails.root.join("tmp",@filename), "wb") do |file|
file.write open(BUCKET.objects[@filename].url_for(:read)).read
end
pensées?