【发布时间】:2016-02-05 23:51:52
【问题描述】:
我想设置 pageToken 以获取存储在 Google Cloud Storage 中的项目。我正在使用适用于 Java v1.19.x 的 Google API 客户端库。
我不知道从文件路径(或文件名)生成 pageToken。
存储在桶中的2个文件。
- 我的桶
- /test.csv
- /test2.csv
当我尝试使用以下参数Google APIs Explorer 时,我可以得到 nextPageToken Cgh0ZXN0LmNzdg==。
我发现可以通过base64解码nextPageToken得到test.csv字符串。
- 桶:我的桶
- 页面令牌:
- 前缀:测试
- 最大结果: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);
【问题讨论】:
-
你为什么要在第一个请求上设置页面令牌?您只需在后续请求中设置它。
-
感谢您的评论。我的应用程序将最后一个文件名(下载成功)保存在本地配置文件中。如果下载下一个文件时出现错误,应用程序会尝试再次获取文件列表,下载完成的文件除外。
-
我认为这行不通。页面令牌是一个不透明的标识符。不支持从特定对象恢复。
-
如您所说,页面令牌似乎不透明。供您参考,当路径长度小于 128 字节时,我可以使用以下代码获取页面令牌。谢谢你。 private String base64Encode(String path) { byte[] encoding; byte[] utf8 = path.getBytes(Charsets.UTF_8);编码=新字节[utf8.length + 2];编码[0] = 0x0a; encoding[1] = new Byte(String.valueOf(path.length()));字符串 s = BaseEncoding.base64().encode(encoding);返回 s; }
-
@sakama 是否可以发布您的答案并接受它,以便其他人可以从中受益。谢谢