如何设置pageToken通过Java SDK从Google Cloud Storage获取项目列表? [英] How can I set pageToken to get item lists from Google Cloud Storage via Java SDK?

查看:232
本文介绍了如何设置pageToken通过Java SDK从Google Cloud Storage获取项目列表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想设置pageToken来获取存储在Google Cloud Storage中的项目.我正在使用Java API v1.19.x的Google API客户端库.

I want to set pageToken to get items stored at Google Cloud Storage. I'm using Google API Client Library for Java v1.19.x.

我不知道从文件路径(或文件名)生成pageToken.

I have no idea to generate pageToken from file path(or file name).

存储在存储桶中的2个文件.

2 files stored in bucket.

  • 我的桶
    • /test.csv
    • /test2.csv
    • my-bucket
      • /test.csv
      • /test2.csv

      当我尝试使用以下参数 Google API浏览器时,我可以得到nextPageToken Cgh0ZXN0LmNzdg==.

      When I tried Google APIs Explorer with following parameters, I could get nextPageToken Cgh0ZXN0LmNzdg==.

      我发现我可以通过使用base64解码nextPageToken来获得test.csv字符串.

      And I found out that I can get test.csv string by decoding nextPageToken with base64.

      • 存储桶:我的存储桶
      • pageToken:
      • 前缀:测试
      • maxResults:1

      {"kind": "storage#objects", "nextPageToken": "Cgh0ZXN0LmNzdg==", ...}

      但是如何从test.csv获取Cgh0ZXN0LmNzdg==?

      尽管我尝试了Base64编码,但结果不匹配.

      Although I tried Base64 encoding, result didn't match.

      import com.google.api.client.repackaged.org.apache.commons.codec.binary.Base64;
      
      String lastFile = "test.csv"
      String token = Base64.encodeBase64String(lastFile.getBytes());
      
      String bucket = "my-bucket"
      String prefix = "test"
      
      Storage.Objects.List listObjects = client.objects().list(bucket);
      listObjects.setPrefix(prefix);
      listObjects.setPageToken(token);
      long maxResults = 1;
      listObjects.setMaxResults(maxResults);
      do {
          Objects objects = listObjects.execute();
          List<StorageObject> items = objects.getItems();
      
          token = objects.getNextPageToken();
          listObjects.setPageToken(token);
      } while (token != null);
      

      推荐答案

      我可以自己使用以下代码从文件路径字符串中获取下一个标记.

      I could get next token from file path string using following codes by myself.

      如何从路径字符串获取nextToken

      字符串nextToken = base64encode(0x0a + asciiCode + pathString)

      String nextToken = base64encode(0x0a + asciiCode + pathString)

      asciiCode可以在0x01(SOH)和0x7f(DEL)之间使用.它似乎取决于路径长度.

      asciiCode can be taken between 0x01(SOH) and 0x7f(DEL). It seems to depend on path length.

      • 我的水桶/
        • a/a(3byte)0x03
        • a/ab(4byte)0x04
        • test.txt(8byte)0x08
        • my-bucket/
          • a/a(3byte) 0x03
          • a/ab(4byte) 0x04
          • test.txt(8byte) 0x08

          通知

          如果路径长度大于1024字节,则似乎适用另一条规则.但是我找不到规则.

          If path length is longer than 1024 byte, another rule seems to apply. But I couldn't found out rules.

          另请参见对象名称要求

          import com.google.common.io.BaseEncoding;
          
          String lastFile = "test.csv"
          String token = base64Encode(lastFile);
          
          String bucket = "my-bucket"
          String prefix = "test"
          
          Storage.Objects.List listObjects = client.objects().list(bucket);
          listObjects.setPrefix(prefix);
          listObjects.setPageToken(token);
          long maxResults = 1;
          listObjects.setMaxResults(maxResults);
          do {
              Objects objects = listObjects.execute();
              List<StorageObject> items = objects.getItems();
          
              token = objects.getNextPageToken();
              listObjects.setPageToken(token);
          } while (token != null);
          
          private String base64Encode(String path) {
              byte[] encoding;
              byte[] utf8 = path.getBytes(Charsets.UTF_8);
              encoding = new byte[utf8.length + 2];
              encoding[0] = 0x0a;
              encoding[1] = new Byte(String.valueOf(path.length()));
              String s = BaseEncoding.base64().encode(encoding);
              return s;
          }
          

          这篇关于如何设置pageToken通过Java SDK从Google Cloud Storage获取项目列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆