无法从谷歌云存储返回对象名称

我正在以下列格式在谷歌云中存储对象


bucketname/UUID/object

例如,我在谷歌云中有一个对象,存储为


roshanbucket/1fa0e7b4-b551-4e5c-a491-8d86f06a1eef/test.txt

这是我用来返回对象名称的方法


public String getFileName(String bucketName, String uuid) {

    final String[] fileName = {null};

    Page<Blob> blobs = storage.list(bucketName, BlobListOption.prefix(uuid));

    blobs.iterateAll().forEach(

        blob -> fileName[0] = blob.getName()//.substring(blob.getName().lastIndexOf('/') + 1)

    );

    return fileName[0];

  }

这是测试方法


@Test

  public void testGetFileName(){

    String fileName = googleCloudStorage.getFileName("roshanbucket", "1fa0e7b4-b551-4e5c-a491-8d86f06a1eef");

    System.out.println(fileName);

  }

当我运行测试时,它给了我以下错误


java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V


at com.google.cloud.storage.StorageImpl.optionMap(StorageImpl.java:1279)

at com.google.cloud.storage.StorageImpl.optionMap(StorageImpl.java:1268)

at com.google.cloud.storage.StorageImpl.optionMap(StorageImpl.java:1301)

at com.google.cloud.storage.StorageImpl.list(StorageImpl.java:306)

at services.fileserver.GoogleCloudStorage.getFileName(GoogleCloudStorage.java:76)

at services.fileserver.GoogleCloudStorageTest.testDownloadLink(GoogleCloudStorageTest.java:40)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)


如何解决此问题?


婷婷同学_
浏览 126回答 3
3回答

慕雪6442864

似乎你的罐子的版本谷歌提供是错误的。签出包含前提条件的 jar 文件的版本.class

米脂

添加此依赖项解决了问题<dependency>&nbsp;<groupId>com.google.guava</groupId>&nbsp;<artifactId>guava</artifactId>&nbsp;<version>27.1-jre</version></dependency>

波斯汪

我建议按照文档中的步骤操作,以获得适用于 Java 的正确客户端库。此处当前指定的 pom.xml 依赖项如下所示<dependency>&nbsp; <groupId>com.google.cloud</groupId>&nbsp; <artifactId>google-cloud-storage</artifactId>&nbsp; <version>1.66.0</version></dependency>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java