2016-09-01 15 views
5

Wszystko z moim kodem działa. Jedyną pułapką Jestem obecnie stoi to, że nie można określić folder, w wiadrze S3, które chciałbym umieścić mój plik Oto co mam:.ładowanie pliku do określonego folderu w S3 przy użyciu boto3

s3.meta.client.upload_file('/tmp/'+filename, '<bucket-name>', filename) 

Próbowałem zarówno:

s3.meta.client.upload_file('/tmp/'+filename, '<bucket-name>/folder/', filename) 

oraz:

s3.meta.client.upload_file('/tmp/'+filename, '<bucket-name>', '/folder/'+filename) 

jeśli ktoś ma jakieś wskazówki, jak skierować to do określonego folderu (jeśli to możliwe), proszę dać mi znać!

+0

S3 jest sklep obiektu, to nie dotyczy „Nazwa folderu” . Cała "ścieżka" musi być używana jako część nazwy klucza. – mootmoot

Odpowiedz

11

Nie trzeba przekazywać wartości Key jako bezwzględnej ścieżki. Powinno działać:

upload_file('/tmp/' + filename, '<bucket-name>', 'folder/{}'.format(filename)) 
2

Wyjaśniałem mój problem. Miałem dobry pomysł z opcją /folder/ w kluczowym obszarze parametrów, jednak nie potrzebowałem pierwszej / Dziękuję wszystkim! Jest to zasadniczo ten sam pomysł, co powyższa sugestia hjpotter92.

0

Oto metoda, która zadba o zagnieżdżonej struktury katalogów i będzie w stanie przesłać pełny katalog użyciu boto

def upload_directory(): 
    for root, dirs, files in os.walk(settings.LOCAL_SYNC_LOCATION): 
     nested_dir = root.replace(settings.LOCAL_SYNC_LOCATION, '') 
     if nested_dir: 
      nested_dir = nested_dir.replace('/','',1) + '/' 

     for file in files: 
      complete_file_path = os.path.join(root, file) 
      file = nested_dir + file if nested_dir else file 
      print "[S3_UPLOAD] Going to upload {complete_file_path} to s3 bucket {s3_bucket} as {file}"\ 
       .format(complete_file_path=complete_file_path, s3_bucket=settings.S3_BUCKET, file=file) 
      s3_client.upload_file(complete_file_path, settings.S3_BUCKET, file) 
Powiązane problemy