[英]create empty folder S3 ruby SDK
我想使用ruby sdk在亞馬遜S3中創建一個空文件夾。 我已經讀過S3中沒有文件夾概念,所以理論上創建一個文件夾就可以創建一個帶有尾隨“/”的空對象
s3 = Aws::S3::Client.new( region: 'eu-west-1',
credentials: creds)
s3.put_object(bucket: "my_bucket",
key: "my_folder/")
這樣做會在我的存儲桶上創建一個空對象,但如果我嘗試上傳這樣的文件:
s3.put_object(bucket: "my_bucket",
key: "my_folder/myfile")
它不會在my_folder中創建文件。 它維護舊的空對象,並創建一個文件夾和一個文件。 所以在這兩個命令之后,桶結構是:
my_bucket/
my_folder
my_folder/
my_file
為什么會這樣? 為什么它會創建對象my_folder兩次? 我應該如何創建一個空文件夾供以后使用?
當任何密鑰包含'/'時,Amazon S3虛擬文件夾就會存在。 在S3控制台中瀏覽存儲桶時,它會掃描對象鍵以查找公共前綴,然后使用該前綴顯示存儲桶的子集。
給定以下對象鍵:
然后,Amazon S3將顯示頂級文件夾“照片”和“視頻”。 如果刪除“videos / funny.mp4”對象,則“視頻”目錄將消失。
正如你所說,S3沒有文件夾的概念,“沒有”,它只是有一些對象,其中可以有“/”來模仿文件系統中文件夾的命名約定。
“my_folder”沒有被處理兩次,只有兩個名稱以“my_folder /”開頭的對象。
如果你想堅持使用這種范式的文件夾,那么你必須要做的事情就是在你創建第一個“my_folder / *”對象時立即刪除你的“my_folder /”對象。
你真的不應該問,“我應該如何創建一個空文件夾供以后使用?” 當您確認文件夾不存在時。
S3表現如預期。 它不支持文件夾。 當您使用名稱my_folder/myfile
創建文件時,S3使用密鑰my_folder/myfile
創建對象。 “文件夾”的概念是圍繞使用前綴的訪問構建的。 這樣,您可以在“文件夾”中列出對象:
bucket.objects.with_prefix('my_folder').collect(&:key)
# => ["my_folder/myfile"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.