使用 Java/Kotlin 更新 Google Cloud Storare 中对象的元数据会给出 NullPoiner



我创建了一个函数来更新Google Cloud Storage中对象的元数据。

fun updateUserMetadata(objectName: String, userMetadata: Map<String, String>) {
val blobId = BlobId.of(bucketName, basePath + objectName)
val blobInfo: BlobInfo = BlobInfo.newBuilder(blobId)
.setMetadata(userMetadata)
.build()
storage.update(blobInfo)
}

不知何故,这个函数总是给我以下异常:

java.lang.NullPointerException
at com.google.cloud.storage.BlobId.fromPb(BlobId.java:119)
at com.google.cloud.storage.BlobInfo.fromPb(BlobInfo.java:1029)
at com.google.cloud.storage.Blob.fromPb(Blob.java:918)
at com.google.cloud.storage.StorageImpl.update(StorageImpl.java:428)
at com.google.cloud.storage.StorageImpl.update(StorageImpl.java:447)
at com.peerke.outdoorpuzzlegame.backend.common.gcp.cloudstorage.CloudStorageBase.updateUserMetadata(CloudStorageBase.kt:88)
at com.peerke.outdoorpuzzlegame.backend.common.gcp.cloudstorage.CloudStorageBaseTest.testUpdateUserMetadata(CloudStorageBaseTest.kt:71)

在上面的函数中,没有变量为空。

这是一个错误还是我做错了什么?

我一直在研究你是如何传递东西的,我首先没有看到任何直接的错误。我发现的完全有意义,我希望可以帮助您找到解决方案:

gsObjectName - the object name of this Blob, if it is stored on Google Cloud Storage, null otherwise.

我倾向于将其作为您如何指向 GCS 对象的路径问题。它无法到达您所指向的位置可以解释为什么会引发空指针。

我建议修改您指向GCS对象路径的方式。

希望这有帮助。

编辑:

我发现了另一件事可以帮助您解决问题。这是做你正在尝试做的事情的类似方式,不同的视角可能会帮助你。

看看这里

最新更新