簡體   English   中英

創建空文件夾S3 ruby​​ SDK

[英]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控制台中瀏覽存儲桶時,它會掃描對象鍵以查找公共前綴,然后使用該前綴顯示存儲桶的子集。

給定以下對象鍵:

  • 照片/家庭/ reunion.jpg
  • 照片/家庭/ vacation.jpg
  • 視頻/ funny.mp4

然后,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM