Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Google云存储中使用服务器端gzip解压缩';什么是GoAPI?_Go_Google Cloud Platform_Google Cloud Storage_Compression - Fatal编程技术网

如何在Google云存储中使用服务器端gzip解压缩';什么是GoAPI?

如何在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,它看

我在GCS中有一个用gzip压缩的文件,元数据
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,如前所述。