【发布时间】:2019-08-28 10:00:59
【问题描述】:
我刚刚从应用引擎标准的 1.76.0 升级到谷歌云存储 java 1.88.0。我在尝试读取 com.google.cloud.storage.Blob 对象时遇到了以下问题。解决方法不适用于应用程序引擎上的大文档,那么有解决方案吗?也许我需要检查一些依赖项?
ByteStreams.copy(Channels.newInputStream(blob.reader()), resp.getOutputStream());
现在失败了
java.lang.NoSuchMethodError: com.google.api.services.storage.Storage$Objects$Get.setReturnRawInputStream(Z)Lcom/google/api/client/googleapis/services/AbstractGoogleClientRequest;
at com.google.cloud.storage.spi.v1.HttpStorageRpc.createReadRequest(HttpStorageRpc.java:658)
at com.google.cloud.storage.spi.v1.HttpStorageRpc.read(HttpStorageRpc.java:693)
at com.google.cloud.storage.BlobReadChannel$1.call(BlobReadChannel.java:127)
at com.google.cloud.storage.BlobReadChannel$1.call(BlobReadChannel.java:124)
at com.google.api.gax.retrying.DirectRetryingExecutor.submit(DirectRetryingExecutor.java:105)
at com.google.cloud.RetryHelper.run(RetryHelper.java:76)
at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:50)
at com.google.cloud.storage.BlobReadChannel.read(BlobReadChannel.java:123)
at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:65)
at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:109)
at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:103)
at java.io.InputStream.read(InputStream.java:101)
at com.google.common.io.ByteStreams.copy(ByteStreams.java:108)
但可以替换为,作为一种解决方法(但可能会大大降低内存效率):
ByteSource.wrap(storage.readAllBytes(blob)).copyTo(resp.getOutputStream());
相关的 pom 条目可能是:
<dependency>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-admin</artifactId>
<version>6.9.0</version>
</dependency>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
<version>1.88.0</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>28.0-jre</version>
</dependency>
<!-- firestore fails with NoClassDefFoundError:
com/google/protobuf/GeneratedMessageV3 without this -->
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.6.1</version>
</dependency>
【问题讨论】:
-
你找到解决方案了吗?
-
不,我还没有尝试其他任何方法。
标签: java firebase google-app-engine google-cloud-storage