这个问题困扰了我一天的大部分时间。
一、背景
我正在尝试通过我自己的Google App EngineJava项目阅读我的应用程序的Play商店评论。现在我可以使用Google Cloud Storage client api(java)获取所有文件的列表。我还可以读取该存储桶中每个csv文件的meta并将其打印到日志中:
问题
我根本找不到读取实际对象并获取csv数据的方法。我的java代码片段:
BUCKET_NAME = "pubsite_prod_rev_*******";
objectFileName = "reviews/reviews_*****_***.csv"
Storage.Objects.Get obj = client.objects().get(BUCKET_NAME, objectFileName);
InputStream is = obj.executeMediaAsInputStream();
现在,当我打印这个输入流时,它告诉我它的GZIPInputStream(java.util.zip.GZIPInputStream@f0be2c)。将此输入流转换为byte[]或String(所需)不起作用。如果我尝试使用以下方法将其封装在GZIPInputStream对象中:
zis = new GZIPInputStream(is);
它抛出ZipException:不是GZIP格式。
文件的元数据:
"contentType": "text/csv; charset=utf-16le",
"contentEncoding": "gzip",
我做错了什么?
子问题:在过去,我使用GcsService成功地从谷歌云存储中读取文本数据,但它似乎不适用于具有Play商店审查csv文件的存储桶。有人知道我的谷歌应用引擎项目(连接到同一个谷歌开发者帐户)是否可以读取这些存储桶吗?
使用执行媒体()和parseAsString解决了它
HttpResponse response = obj.executeMedia();
response.parseAsString(); //works!!