2016-02-20 23 views
3

我有一個應用程序通過REST API與我的Amazon S3存儲桶進行通信。身份驗證正常工作,我可以執行許多操作(例如,創建文件夾,上載文件,下載文件,GET對象)。AWS DELETE文件夾請求成功,但該文件夾仍然存在

我還有一個問題:儘管我的REST請求刪除文件夾成功(即AWS返回「204無內容」響應),但仍可通過AWS Web控制檯訪問「已刪除」文件夾。

在發出DELETE請求之前,我可以通過AWS Web控制檯看到文件夾(及其子文件夾和文件)存在。我的存儲桶版本化DISABLED。

現在的應用程序發出REST DELETE請求:

DELETE /App_Root/ HTTP/1.1 
Accept: */* 
User-Agent: libcurl/7.28.0 OpenSSL/0.9.8j App/2.1.105-Windows 
Host: my-company-s3-account.s3.amazonaws.com 
Date: Sat, 20 Feb 2016 18:24:08 +0000 
Authorization: AWS [signed string] 

這裏是亞馬遜S3收到的響應:

HTTP/1.1 204 No Content 
x-amz-id-2: 6in0UAKZZWfgw2ifNhLVT8+UhNLGAo/8948L2SUqhg/OB5agr6X8q8ceQ/3Z4emO4n/XgfXqIUo= 
x-amz-request-id: 42802B620F593699 
Date: Sat, 20 Feb 2016 18:23:44 GMT 
Server: AmazonS3 

刷新AWS Web控制檯顯示了刪除的文件夾仍然存在。向Amazon S3發出另一個GET對象請求顯示文件夾和文件仍像以前一樣存在。

我錯過了什麼嗎?

回答

6

您錯過了文件夾實際上不存在於S3中的事實。

看起來像文件夾的所有內容都只是控制檯呈現的一種方便的錯覺,它基於對象鍵中的/分隔符。

Amazon S3數據模型本身不支持文件夾的概念,也不提供用於文件夾級操作的任何API。但是Amazon S3控制檯支持文件夾來幫助您組織數據。

—   http://docs.aws.amazon.com/AmazonS3/latest/UG/about-using-console.html

要刪除「文件夾」使用API​​,你必須刪除,似乎是「中」,它的對象。

那麼,爲什麼你沒有在你的代碼中出現錯誤?

這是因爲DELETE REST動詞是冪等的。刪除請求後,在刪除的路徑中沒有對象,因此,從技術上講,您「成功」,並且無論您刪除了多少次,操作都會成功,無論它是否存在。

控制檯仍然顯示一個文件夾,因爲存在具有該前綴的對象,仍在存儲桶中。

當您從控制檯刪除文件夾時,控制檯通過發送一個或多個附加請求來刪除基礎對象,從而負責實際刪除「包含」對象。

還要注意,在使用API​​存儲對象「in」之前,不需要創建文件夾。如果您在密鑰中創建了一個帶有/斜線的對象,它將隱式出現在控制檯中。

+1

@sqlbot您的回覆是我收到的快樂回覆中最清晰,最翔實的回覆之一。當我長大後,我想發佈優秀的回覆,如你的。 的確,我在Amazon S3中實現了經典文件夾結構的外觀(好嗎?),我甚至欺騙了我自己。感謝您讓我回想起S3中的所有內容都是按鍵,而不是文件夾。 –

相關問題