如何在Google云存储中使用服务器端gzip解压缩';什么是GoAPI?
我在GCS中有一个用gzip压缩的文件,元数据如何在Google云存储中使用服务器端gzip解压缩';什么是GoAPI?,go,google-cloud-platform,google-cloud-storage,compression,Go,Google Cloud Platform,Google Cloud Storage,Compression,我在GCS中有一个用gzip压缩的文件,元数据Content Encoding设置为gzip。这允许HTTP层设置请求头接受编码:gzip,然后使用一致的HTTP客户端自动解压缩 但是,它也允许客户端请求未压缩的文件(即,不指定接受编码:gzip)。然后在谷歌方面进行解压缩,浪费带宽 在这种情况下,虽然我想浪费带宽。流量是GCP区域的本地流量,因此带宽实际上是无限的,而且是免费的。我更缺乏CPU,因为我的虚拟机是一个低CPU负载的虚拟机,所以我想把解压缩工作交给谷歌 如果我使用gsutil,它看
Content Encoding
设置为gzip
。这允许HTTP层设置请求头接受编码:gzip
,然后使用一致的HTTP客户端自动解压缩
但是,它也允许客户端请求未压缩的文件(即,不指定接受编码:gzip
)。然后在谷歌方面进行解压缩,浪费带宽
在这种情况下,虽然我想浪费带宽。流量是GCP区域的本地流量,因此带宽实际上是无限的,而且是免费的。我更缺乏CPU,因为我的虚拟机是一个低CPU负载的虚拟机,所以我想把解压缩工作交给谷歌
如果我使用gsutil
,它看起来很聪明,而且是通过网络压缩的
默认情况下,Go API显示相同的行为
如果我尝试将HttpClient的设置为可能取消设置某些头,我看不到任何请求头,而且它还希望我手动添加GCS凭据
我还尝试将ReadCompressed
设置为true
和false
,但没有成功
我在Google端设法将其解压缩的唯一方法是创建一个签名URL,然后使用curl
下载它。这样一来,curl的输出速率与带宽使用率相匹配。在所有其他情况下,网络流量是下载输出的10%,这表明它在传输过程中被压缩
在GoAPI中,我如何表示希望数据未压缩
我想看到的是slurm-I eth0
显示与我的/gcscat gs://..相同的速度pv>/dev/null
,就像我使用curl-s时看到的那样…|pv>/dev/null
在一个签名的URL上。我不知道你被困在哪里,但我在我这边测试了这段代码,它工作得很好。如果内容编码没有设置为GZIP,我将得到一个二进制内容。如果设置了,我会得到一个文本内容
import (
"cloud.google.com/go/storage",
"context",
"fmt"
"io/ioutil"
)
func main() {
ctx := context.Background()
client,err :=storage.NewClient(ctx)
fmt.Println(err)
bucket := client.Bucket("gib-multiregion-us")
blob := bucket.Object("gzip.blob.gz")
reader, err := blob.NewReader(ctx)
fmt.Println(err)
defer reader.Close()
content, err := ioutil.ReadAll(reader)
fmt.Println(err)
fmt.Println(string(content))
}
但它是在服务器上解压缩的吗?你的代码与我的基本相同。当我执行这里的操作时,我在网络上看到例如20MB/s(见slurm
),当我将其打印到标准输出到pv
时看到200MB。我使用的方法似乎是正确的,因为我在使用curl时看到了200MB和200MB,如前所述。