AWS DELETE文件夹请求成功但文件夹仍然存在

Mos*_*bin 3 rest amazon-s3 amazon-web-services

我有一个应用程序通过REST API与我的Amazon S3存储桶通信.身份验证工作正常,我能够执行许多操作(例如,创建文件夹,上传文件,下载文件,GET对象).

我还有一个问题:虽然我的REST请求删除文件夹成功(即AWS返回"204 No Content"响应),仍然可以通过AWS Web控制台访问"已删除"文件夹.

在发出DELETE请求之前,我可以通过AWS Web控制台看到该文件夹​​(及其子文件夹和文件)存在.我的存储桶版本已禁用.

现在,应用程序发出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]
Run Code Online (Sandbox Code Playgroud)

以下是从Amazon 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
Run Code Online (Sandbox Code Playgroud)

刷新AWS Web控制台显示已删除的文件夹仍然存在.向Amazon S3发出另一个GET对象请求显示文件夹和文件仍然像以前一样存在.

我错过了什么吗?

Mic*_*bot 8

您错过了S3中实际不存在文件夹的事实.

看起来像文件夹的所有内容只是控制台提供的一种方便的错觉,基于/对象键中的分隔符.

Amazon S3数据模型本身不支持文件夹的概念,也不提供任何用于文件夹级操作的API.但Amazon S3控制台支持文件夹以帮助您组织数据.

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

要使用API​​删除"文件夹",您必须删除看似"在"中的对象.

那么,为什么不在代码中出错?

这是因为DELETEREST动词是幂等的.在删除请求之后,您删除的路径中没有对象,因此,从技术上讲,您"成功",无论您删除了多少次,无论是否存在,操作都会成功.

控制台仍显示一个文件夹,因为该对象具有该前缀,仍在存储桶中.

从控制台删除文件夹时,控制台通过发送一个或多个其他删除基础对象的请求来处理"包含"对象的实际删除.

另请注意,在使用API​​将对象"存储"之前,无需创建文件夹.如果您只/在键中创建一个带斜杠的对象,它将隐式出现在控制台中.