我想设置pageToken以获取存储在Google Cloud Storage的项目。我正在使用Google API Client Library for Java v1.19.x。
我不知道从文件路径(或文件名)生成pageToken。
存储桶中存储了2个文件。
- 我的水桶
- /test.csv
- /test2.csv
当我使用以下参数尝试Google APIs Explorer时,我可以得到nextPageToken Cgh0ZXN0LmNzdg==
。
我发现我可以通过使用base64解码nextPageToken来获得test.csv
字符串。
- bucket:my-bucket
- pageToken:
- 前缀:test
- 最大结果:1
{"kind": "storage#objects", "nextPageToken": "Cgh0ZXN0LmNzdg==", ...}
个
但是如何从test.csv
得到Cgh0ZXN0LmNzdg==
?
虽然我尝试了Base64编码,但结果不匹配。
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);
字符串
3条答案
按热度按时间w3nuxt5m1#
我可以得到下一个令牌从文件路径字符串使用以下代码由自己。
如何从path string中获取nextToken
String nextToken = base64encode(0x0a + asciiCode + pathString)
asciiCode可以在0x 01(SOH)和0x 7 f(DEL)之间取。它似乎取决于路径长度。
注意事项
如果路径长度大于1024字节,则另一个规则似乎适用。但我找不到规则。
参见Object Name Requirements
字符串
xxls0lw82#
正如@sakama所回答的那样,页面令牌确实被编码为
base64([LF] + length + name.bytes)
。除了他的答案之外,数组的长度是一个varint,它将回答如何编码长于127字节的名称。示例代码:字符串
最大对象名称大小为1024
hmmo2u0o3#
我知道这个问题已经得到了回答,并且适用于Java,我想提一下这个问题也适用于PHP。
在上面sakama批准的帖子的帮助下,我想出了他的解决方案的PHP版本。
生成token的PHP等价物如下:
第一个月
字节模式看起来确实是(正如sakama已经提到的):
<line feed><line data length><line data>
个