我有一个用户上传内容的存储桶。这是桶的样子
bucket name : example-cdn
Directory under it : files
现在,如果用户ID为2
且时间为1492693589
,则现在如果用户上传图片,则网址将为
example-cdn/files/2/1492693589/image.png
现在,如果我尝试删除该特定图像,则使用该文件删除整个目录。
这是代码
$s3 = new S3Client([
'version' => 'latest',
'region' => 'ap-south-1',
'credentials' => array(
'key' => '************',
'secret' => '*****************************'
)
]);
$s3->deleteObject(array('Bucket' => "example-cdn", 'Key' => "files/2/1492693589/image.png"));
现在当上面一行执行时,它也会删除file
文件夹和2
文件夹。我怎样才能删除图像文件image.png
答案 0 :(得分:2)
文件夹不存在。
Amazon S3是平面对象商店。它不会在文件夹/目录中存储文件。但是,文件可以使用包含斜杠的文件名(' Key')存储,例如images/cat.jpg
。这给出了目录的幻觉,但实际上并没有创建目录。
例如,此命令仅通过将文件命名为(假装)目录来创建images
目录:
aws s3 cp cat.jpg s3://bucket/images/cat.jpg
在管理控制台中查看存储桶时,将显示images
目录,并且cat.jpg
将位于其中。但它并不存在!
此命令会将图像移动到另一个(假装)目录:
aws s3p mv s3://bucket/images/cat.jpg s3://bucket/pictures/cat.jpg
这将使images
目录消失,并显示一个新的pictures
目录。同样,这是因为目录实际上并不存在 - 它们只是以这种方式显示,因为人类喜欢目录的概念。
在使用AWS API时,目录称为公共前缀。它们的行为类似于目录,但不存在。
但是,您可能会问,"如果我转到Amazon S3管理控制台并单击创建文件夹会怎样?当然会创建一个文件夹!"
实际上,没有。它只是创建一个带有目录名称的零字节文件,这会强制显示目录。删除该零字节文件将使该目录消失,因为该路径中不再有任何内容。
底线:目录不存在,但可以随意移入和移出它们,就好像它们确实存在一样。
答案 1 :(得分:0)
S3存储桶模拟文件夹。它们实际上并不存在。如果没有前缀为“files / 2 /”的键,则不会显示文件夹。
如果您确实希望“文件夹”不会消失,请确保其中有一个文件可以显示它们。
澄清一下:这不是sdk独有的,这就是服务的运作方式。