关于Google Cloud Storage空文件getMetadata().size显示20字节的疑问
GCS空文件元数据size显示20字节的问题解答
为什么getMetadata().size会报告20字节?
你上传时开启了gzip: true选项,空文件被gzip压缩后会生成一个包含基础压缩结构(文件头、校验信息等)的最小压缩包,这个压缩包的大小正好是20字节。GCS存储的是压缩后的文件,所以元数据里的size字段反映的是云端存储的压缩文件实际大小,而非原文件的0字节。这是否与元数据或GCS特定开销相关?
和GCS的元数据额外开销无关,完全是gzip压缩机制导致的。GCS不会为空文件额外添加字节,这个20字节是压缩后文件本身的固有大小。能否避免该大小差异,还是这属于预期行为?
可以避免:如果不需要gzip压缩,上传时去掉gzip: true选项,空文件上传后元数据的size就会显示为0。如果必须使用gzip压缩,这个差异属于预期行为——云端存储的是压缩态文件,size是压缩后的实际存储大小,下载时客户端会自动解压缩,因此得到的是原文件的0字节大小。该值是否始终为20字节?
是的,对于空文件开启gzip压缩的场景,这个压缩后的大小是固定的20字节,因为gzip的最小压缩包结构尺寸是固定的。
你的上传代码中明确设置的gzip: true是问题的关键:
const storage = new Storage({ projectId }) const bucket = storage.bucket(bucketName) let options = { gzip: true, // 该选项触发了空文件的压缩操作 destination: path, metadata: { cacheControl: "public, max-age=31536000" } } const [file] = await bucket.upload(path, options)
内容的提问来源于stack exchange,提问作者young B
相关产品推荐
相关产品推荐

