如何设置pageToken通过Java SDK从Google Cloud Storage获取项目列表? [英] How can I set pageToken to get item lists from Google Cloud Storage via Java SDK?
问题描述
我想设置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屋!