如何使用 Java API 在谷歌云存储桶中创建一个空文件夹

Posted

技术标签:

【中文标题】如何使用 Java API 在谷歌云存储桶中创建一个空文件夹【英文标题】:How to create an empty folder in google cloud bucket using Java API 【发布时间】:2016-02-14 21:08:21 【问题描述】:

我正在使用 JSON API - Google API Client Library for Java 来访问 Google Cloud Storage 中的对象。我需要在存储桶中创建(而不是上传)一个空文件夹。 Google Developer Web Console has that option to creating a directory,但 Java API 和 gsutil 命令都没有创建文件夹命令。如果有人知道该怎么做,请告诉我。提前谢谢...

【问题讨论】:

我能问一下为什么吗?此外,从技术上讲,云存储中没有“文件夹”的概念,因为它不是文件系统。 cloud.google.com/storage/docs/gsutil/addlhelp/… 是的,你可以。我知道文件系统是不同的。请看这个案例,我正在为用户创建一个 UI。与 Google Bucket Storage 同步的 UI。所以,问题是他可以组织他的文件,比如创建/删除文件和文件夹。因此,删除 Object 命令是存在的,但在 Google 开发者控制台中存在创建目录,但它在 Java API 或 gsutil 命令中不可用。 【参考方案1】:

您可以通过上传带有斜杠的零大小对象来模拟文件夹。

正如问题 cmets 中所述,Google Cloud Storage 不是文件系统,模拟文件夹有严重的限制。

【讨论】:

非常感谢。我会努力实现你的想法。【参考方案2】:

我认为最好在文件名中创建文件夹。例如,如果您需要一个名为 images 的文件夹和另一个名为 docs 的文件夹,当您指定要上传的对象的名称时,请按以下方式 images/name_of_filedocs/name_of_file强>。

如果文件的名称是 images/dogImage 并且您上传了该文件,您会在存储桶中找到一个名为 images 的文件夹。

希望对你和其他人有所帮助

【讨论】:

【参考方案3】:

这是我创建空(模拟)文件夹的 Java 方法:

public static void createFolder(String name) throws IOException 
    Channels.newOutputStream(
            createFile(name + "/")
    ).close();


public static GcsOutputChannel createFile(String name) throws IOException 
    return getService().createOrReplace(
            new GcsFilename(getName(), name),
            GcsFileOptions.getDefaultInstance()
    );


private static String name;

public static String getName() 
    if (name == null) 
        name = AppIdentityServiceFactory.getAppIdentityService().getDefaultGcsBucketName();
    
    return name;


public static GcsService service;

public static GcsService getService() 
    if (service == null) 
        service = GcsServiceFactory.createGcsService(
                new RetryParams.Builder()
                        .initialRetryDelayMillis(10)
                        .retryMaxAttempts(10)
                        .totalRetryPeriodMillis(15000)
                        .build());
    
    return service;

【讨论】:

以上是关于如何使用 Java API 在谷歌云存储桶中创建一个空文件夹的主要内容,如果未能解决你的问题,请参考以下文章

如何在谷歌云数据存储中创建新模型(种类)

如何在谷歌存储桶中列出所有上传到存储桶的文件?

如何在谷歌 vm 存储桶服务器中提供静态文件?

在谷歌云上创建集群

谷歌云从存储桶部署静态应用程序而不使用本地机器

如何在谷歌云功能中使用谷歌表格 API