You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Google Drive V2客户端库无法获取部分文件的fileSize问题求助

解决Google Drive V2客户端库获取docx文件大小返回null的问题

问题情况

  • 使用Google Drive V2客户端库调用files().get()接口获取文件大小,部分包含内容的docx文件返回fileSize为null
  • 这类文件的共性是被Google Docs打开编辑过,且在Drive网页UI中也无法查看文件大小

原因分析

当docx文件通过Google Docs打开后,Drive会自动创建关联的Google Docs云端版本,原文件的元数据字段fileSize会被清空——此时Drive优先关联云端编辑版本,原文件的大小信息不再被主动维护,导致接口和UI都无法获取到该值。

解决方案

方案1:通过媒体流获取原文件大小(V2可用)

直接请求文件的媒体内容流,通过读取流的实际大小来获取文件尺寸,不受元数据影响:

Drive service = new Drive.Builder(httpTransport, jsonFactory, httpRequestInitializer).build();
// 获取文件媒体流
InputStream inputStream = service.files().get(fileId).executeMediaAsInputStream();

// 读取流并计算大小
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int readLength;
while ((readLength = inputStream.read(buffer)) != -1) {
    byteStream.write(buffer, 0, readLength);
}
Long fileSize = (long) byteStream.size();

// 关闭流资源
inputStream.close();
byteStream.close();

方案2:迁移到Google Drive V3客户端库

Drive V3对转换后文件的元数据处理更完善,字段名从fileSize改为size,且需要明确指定要获取的字段:

Drive service = new Drive.Builder(httpTransport, jsonFactory, httpRequestInitializer)
        .setApplicationName("你的应用名称")
        .build();
// 指定获取size字段
com.google.api.services.drive.v3.model.File file = service.files().get(fileId)
        .setFields("size")
        .execute();
Long fileSize = file.getSize();

V3会自动关联原文件的大小信息,无需额外处理流。

注意事项

  • 方案1需要注意流资源的关闭,避免内存泄漏;如果是大文件,建议写入临时文件后再获取文件大小,避免占用过多内存
  • 若必须使用V2版本,优先选择方案1,这是最可靠的方式

内容的提问来源于stack exchange,提问作者Adharsha Neel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 04:42:19