簡體   English   中英

如何使用boto3檢查S3密鑰是否為空?

[英]How can I check if an S3 key is empty using boto3?

S3本身不支持文件夾,但是可以使用空鍵來模擬它們。 因此,我可以通過創建密鑰而不設置值來創建新文件夾:

bucket.new_key('directory')

我想確定這樣的密鑰是目錄還是文件。 我認為可以通過檢查鍵的內容是否為空來完成此操作,但我不知道如何操作。

S3本身不支持文件夾,但是可以使用空鍵來模擬它們。

這只是在非常有限的程度上是正確的

鍵指向0字節(空)對象的事實只是一個副作用。 重要的因素是鍵名稱以/結尾。

以尾隨“ /”命名的對象在Amazon S3控制台中顯示為文件夾。

http://docs.aws.amazon.com/AmazonS3/latest/UG/FolderOperations.html

因此,您的測試很簡單:如果密鑰以/結尾,那就是假裝文件夾占位符。

普通對象可以是空的(簡單地是一個“空文件”,例如未報告任何內容的日志操作的輸出),因此,空度不是有效的測試。

但是,這究竟對您有什么作用?

他們可以被模仿

以上僅與S3控制台相關。

  • 通過創建這樣的對象,您要做的唯一一件事情就是為控制台提供要顯示的文件夾的圖片,以便您可以單擊它以在其中放置文件,但是

  • 如果已經有相同前綴的對象,則控制台無論如何已經在其中顯示一個文件夾,並且

  • 您可以以編程方式創建對象pics/funny/cat.jpg而無需先創建pics/pics/funny/並且S3對待它們的方式與創建文件夾占位符的方式相同,並且

  • 刪除此類對象不會刪除“文件夾”的“內容”(因此從某種意義上講,這不會“模擬”文件夾),並且

  • 刪除此類對象不會將控制台中的文件夾圖標刪除,除非存儲桶中沒有其他帶有該前綴的對象。

您不需要這些占位符對象即可像它們是分層的那樣使用存儲桶中的對象。

列表對象請求API允許您指定prefix ,例如myfolder/以獲得myfolder/所有對象的列表,包括子文件夾中的所有對象;或者,如果您指定/delimiter ,您將收到僅該文件夾中的對象,而不是子文件夾中的對象。

這些API操作不需要創建這些特殊對象。

S3不支持實際的文件夾,在某種意義上說,S3中的任何內容都“不”存儲在“內部”或“其他”之下。 這是為了可伸縮性。 但是,S3確實使用API​​內置的delimiter邏輯來支持邏輯文件夾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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