【问题标题】:unable to delete file in gcp storage using java which has space in file name无法使用文件名中有空格的java删除gcp存储中的文件
【发布时间】:2020-07-06 19:10:48
【问题描述】:
BlobId blobId = BlobId.of(bucketName, filename);
Blob blob = storage.get(blobId);
boolean isFileDeleted = storage.delete(blobId);

在这里,我收到 null 的 blob 文件名空间。在我的存储桶中,结构是sample-bucket/Archive 2copy.zip。请注意文件名中的空格。

谁能帮帮我?

【问题讨论】:

  • 在 BlobId.of() 调用中,您是否使用“sample-bucket/Archive 2copy.zip”作为对象名称?如果是这样,请尝试改用: BlobId blobId = BlobId.of("sample-bucket", "Archive 2copy.zip");
  • 是的,我试过了

标签: java google-cloud-platform google-cloud-storage


【解决方案1】:

我使用的是Google Java Api - StorageExample.java,并且能够删除一个名称中带有空格的 blob。他们正在按 id 删除 blob。

 private static class DeleteAction extends BlobsAction {
    @Override
    public void run(Storage storage, BlobId... blobIds) {
      // use batch operation
      List<Boolean> deleteResults = storage.delete(blobIds);
      int index = 0;
      for (Boolean deleted : deleteResults) {
        if (deleted) {
          // request order is maintained
          System.out.printf("Blob %s was deleted%n", blobIds[index]);
        }
        index++;
      }
    }
  }

  Expected: <bucket> <path>+
  target/appassembler/bin/StorageExample delete bucket-name 'test file'
  Blob BlobId{bucket=bucket-name, name=test file, generation=null} was deleted

【讨论】:

  • 终于找到了根本原因,老的云依赖sdk有这个问题。现在换成新版本的google cloud java.It解决了这个问题
  • 嗨@adityanirmala,您能否发布您的解决方案作为此问题的答案?这将为可能看到此问题的其他社区用户提供更广泛的可见性。谢谢!
  • 嗨@sllopis 当然,我在这里提到它。从 compile 'com.google.cloud:google-cloud-storage:1.88.0' 更改为 compile 'com.google.cloud:google-cloud-storage:1.106.0' 此版本更改解决了问题。
【解决方案2】:

正如 aditya nirmala 指出的那样:

从 compile 'com.google.cloud:google-cloud-storage:1.88.0' 更改为 compile 'com.google.cloud:google-cloud-storage:1.106.0' 此版本更改解决了该问题。

【讨论】:

    猜你喜欢
    • 2021-03-11
    • 2020-04-08
    • 2016-10-08
    • 2020-11-26
    • 2015-04-11
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多