检查路径是否是文件 Amazon S3

Cas*_*sie 3 scala amazon-s3 amazon-web-services

我有使用 Scala 列出 AWS S3 目录的功能,我想检查列出的路径是文件还是目录。如何使用 amazon-sdk-s3 实现此功能(isFile 方法)?

它是这样的:

  def listContents(): Seq[T] =
    val paths = s3Client.list(inputPath)
    for {
      path <- paths if isFile(new Path(path)).getOrElse(false)
      res <- transform(path.toString)
    } yield res

def isFile(path: String) = ??? //implementation I need
Run Code Online (Sandbox Code Playgroud)

Joh*_*ein 5

Amazon S3 没有“目录”的概念。

相反,对象的完整路径存储在其密钥(文件名)中。

例如,一个对象可以存储在 Amazon S3 中,其密钥为:invoices/2020-09/inv22.txt

即使invoices2020-09目录不存在,也可以创建该对象。通过 Amazon S3 控制台查看时,这些目录看起来好像是自动创建的,但如果删除对象,这些目录将消失(因为它们从未存在过)。

如果用户单击 Amazon S3 管理控制台中的“创建文件夹”按钮,则会创建一个与文件夹同名的零长度对象。即使文件夹“内部”没有对象,这也会“强制”显示该文件夹。然而,它实际上并不是一个文件夹。

因此,不可能“检查列出的路径是文件还是目录”,因为目录不存在。相反,我建议您假设所有内容都是“文件”,除非它的长度为零