Java 云存储1.88.0访问inputstream时出现异常

Java 云存储1.88.0访问inputstream时出现异常,java,firebase,google-app-engine,google-cloud-storage,Java,Firebase,Google App Engine,Google Cloud Storage,我刚刚在应用程序引擎标准上从1.76.0升级到谷歌云存储java 1.88.0。我在尝试读取com.google.cloud.storage.Blob对象时遇到以下问题。这个解决方案不适用于AppEngine上的大型文档,所以有解决方案吗?也许我需要检查一些依赖性的东西 ByteStreams.copy(Channels.newInputStream(blob.reader()), resp.getOutputStream()); 现在失败了 java.lang.NoSuchMethodErr

我刚刚在应用程序引擎标准上从1.76.0升级到谷歌云存储java 1.88.0。我在尝试读取com.google.cloud.storage.Blob对象时遇到以下问题。这个解决方案不适用于AppEngine上的大型文档,所以有解决方案吗?也许我需要检查一些依赖性的东西

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)
但可以替换为,作为一种解决方法(但可能内存效率大大降低):

相关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>

com.google.firebase
firebase管理员
6.9.0
com.google.cloud
谷歌云存储
1.88.0
番石榴
番石榴
28.0-jre
com.google.protobuf
protobuf java
3.6.1
如文档中所述,要从云存储桶读写,您应该使用appengine工具依赖项:

<dependency>
    <groupId>com.google.appengine.tools</groupId>
    <artifactId>appengine-gcs-client</artifactId>
    <version>0.7</version>
</dependency>

com.google.appengine.tools
appengine gcs客户端
0.7
在遵循前面提到的文档之后,我的应用程序引擎应用程序工作正常

请尝试此文档,并告诉我们是否适合您。

如文档中所述,要从云存储桶读写,您应该使用appengine工具依赖项:

<dependency>
    <groupId>com.google.appengine.tools</groupId>
    <artifactId>appengine-gcs-client</artifactId>
    <version>0.7</version>
</dependency>

com.google.appengine.tools
appengine gcs客户端
0.7
在遵循前面提到的文档之后,我的应用程序引擎应用程序工作正常


请尝试此文档,并告诉我们是否适合您。

您所指的文档指的是访问存储桶的旧“不推荐”方式,因此这不是我们在这里使用的方式(正如您在帖子中看到的,我们使用的是“com.google.cloud.storage.Blob”,因此使用的是新的、新的方式)。不管怎样,我试过你的建议,但不出意料的是,我也会犯同样的错误。顺便说一句,我想这是在1.88.0版本之前就开始工作了。您所指的文档中提到了访问bucket的旧的“不推荐”方式,因此这不是我们在这里使用的方式(正如您在帖子中看到的,我们使用的是“com.google.cloud.storage.Blob”,所以使用的是新的、新的方式)。不管怎样,我试过你的建议,但不出意料的是,我也会犯同样的错误。顺便说一句,我想这在更改为1.88.0之前是有效的。你找到了相同的解决方案吗?没有,我还没有尝试任何其他方法。你找到了相同的解决方案吗?没有,我还没有尝试任何其他方法。