使用HTTP响应从Google Storage读取时接收部分文件(有时)

时间:2013-04-08 22:26:45

标签: httpresponse google-api-java-client google-cloud-storage

我正在尝试从Google存储中读取文件并将其写入我们的文件系统(HDFS)中的文件。如果我运行它一段时间(比方说7天),有时我得到完整的文件,其中的行与源上的whats匹配,有时我得到部分文件(差异非常大)。我粘贴在接受响应的方法下面并将其写入文件。 任何帮助或建议如何我可以进一步解决这个问题将非常感激。

谢谢,

在调用此方法之前,我会对响应状态代码进行简单检查 -

if(response.getStatusCode() == 200 &&
                    StringUtils.equals(response.getContentType(), "application/zip")) {
                    writeHdfsFile(response, path);
}

private void writeHdfsFile(HttpResponse response, String path) throws IOException {
        final GZIPInputStream inputStream = new GZIPInputStream(response.getContent());
        Path filePath = new Path(path);
        final FSDataOutputStream outputStream = fileSystem.create(filePath, true);
        final byte[] buffer = new byte[1024];
        int length;
        try {
            while((length = inputStream.read(buffer)) > 0) {
                outputStream.write(buffer, 0, length);
            }
            outputStream.flush();
        } finally {
            inputStream.close();
            outputStream.close();
        }
    }

1 个答案:

答案 0 :(得分:1)

我们解决它的方法是首先下载文件然后解压缩并编写它。基本上,将其分为两个步骤可以解决这个问题。如果其他人遇到同样的问题..