2012-09-05 6 views
11

Oto Fog walkthrough of creating a file (an S3 object) in a directory (an S3 bucket):Jak utworzyć obiekt S3 w wiadrze z jednym wywołaniem mgły?

connection = Fog::Storage.new({ 
    :provider     => 'AWS', 
    :aws_access_key_id  => YOUR_AWS_ACCESS_KEY_ID, 
    :aws_secret_access_key => YOUR_AWS_SECRET_ACCESS_KEY 
}) 

directory = connection.directories.create(
    :key => "fog-demo-#{Time.now.to_i}", # globally unique name 
    :public => true 
) 

file = directory.files.create(
    :key => 'resume.html', 
    :body => File.open("/path/to/my/resume.html"), 
    :public => true 
) 

Ale wygląda mi się, że wymaga to 2 wywołań API:

  1. connection.directories.create
  2. directory.files.create

Jeśli mam już katalog (wiadro S3), jak utworzyć plik (obiekt S3) za pomocą tylko jednego wywołania Fog?

Odpowiedz

15

Jeśli wiesz istnieje katalog można zrobić

dir = connection.directories.new(:key => 'foo')# no request made 
dir.files.create(...) 
3

Albo, jeśli już masz wiadro, w którym chcesz zapisać plik, a następnie, co można zrobić, to:

bucket = connection.directories.get({BUCKET_NAME}) 

, a następnie będzie można wywołać bucket.files.create, aby przechowywać pliki w tym segmencie.

Mam nadzieję, że pomoże!

+1

Wymaga to różnych uprawnień dostępu: * ListAllMyBuckets * i * GetBucketLocation * dla wszystkich wiader. – schmijos

+0

@JosuaSchmid Dobry połów! :) – facundofarias

+0

To powoduje niepotrzebne dodatkowe żądanie. – mipmip