【问题标题】:Get Google Cloud Storage File from ObjectName从 ObjectName 获取 Google Cloud Storage 文件
【发布时间】:2015-03-29 21:30:11
【问题描述】:

我正在将我的 GAE 应用从已弃用的 File API 迁移到 Google Cloud Storage 客户端库。 我曾经保留 blobKey,但由于从现在开始对它有部分支持(如指定的 here),我将不得不保留对象名称。 不幸的是,来自 GCS 的对象名称看起来或多或少像这样

/gs/bucketname/819892hjd81dh19gf872g8211

如您所见,它还包含存储桶名称

这就是问题所在,每次我需要获取文件以进行进一步处理(或在 servlet 中提供它)时,我都需要创建一个 GcsFileName(bucketName, objectName) 实例,这给了我类似

/bucketName/gs/bucketName/akahsdjahslagfasgfjkasd

哪个(当然)不起作用。

所以。我的问题是: - 如何从 objectName 生成 GcsFileName?

更新

我尝试使用 objectName 作为 BlobKey。但它只是不起作用:(

InputStream is = new BlobstoreInputStream(blobstoreService.createGsBlobKey("/gs/bucketName/akahsdjahslagfasgfjkasd"));

我得到了通常的答案

BlobstoreInputStream 收到无效的 Blob 键

如何使用 ObjectName 获取文件???

【问题讨论】:

    标签: java google-app-engine google-cloud-storage


    【解决方案1】:

    如果您已持久化并检索到例如字符串String objname 值例如"/gs/bucketname/819892hjd81dh19gf872g8211",您可以将其拆分为“/”(String[] pieces = objname.split("/"))并在对GcsFileName 的调用中适当地使用这些片段。

    【讨论】:

    • 这就是我最终所做的。我不得不说我期待一个更好的 API 来实现如此重要的功能。感谢您的帮助
    • 在 Python 中使用 os.path.dirnameos.path.basename 而不仅仅是拆分字符串,但我的 Java-fu 很弱,所以我不知道 Java 等价物(我也希望像你一样使用 Java巨大的标准库为将路径拆分为 dirname 和 basename 的这一重要特性提供了一个更好,即更优雅的 API——就像 Python 的 stdlib 所做的那样;当然,这实际上与 GCS 无关,它通常与文件路径有关,所以它肯定应该在标准库中——也许另一个关于 Java 的 Q 会得到 Java 专家的帮助!-)。顺便说一句,为什么不接受...?
    猜你喜欢
    • 2013-08-22
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    相关资源
    最近更新 更多