2016-09-01 64 views
5

我的代碼一切正常。我目前面臨的唯一的缺陷是,我不能指定S3鬥,我想向我的文件中的文件夾下面是我:使用boto3將文件上傳到S3中的特定文件夾

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

我曾經嘗試都:

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

和:

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

如果任何人有關於如何引導這一個特定的文件夾任何提示(如果可能的話),請讓我知道!

+0

S3是對象存儲的方法,它不涉及「文件夾名稱」 。整個「路徑」必須用作鍵名稱的一部分。 – mootmoot

回答

11

您不需要將Key值作爲絕對路徑傳遞。以下應該工作:

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

我想出了我的問題。我在關鍵參數區域有/folder/選項的想法,但是,我並不需要第一個/謝謝大家!這與hjpotter92上面的建議基本相同。

0

這裏是一個會照顧嵌套目錄結構,並能夠使用上傳完整的目錄博託

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) 
相關問題