Azure Blob Store如何处理以.gz结尾的文件



我有一个名为 notactuallygunzipped.gz的文件,该文件是一个纯文本文件,恰好在 .gz结束,实际上并没有炮制看起来像这样的文件:

1 foo bar
2 fizz buzz

我将其上传到Azure,这样:

az storage blob upload 
  --container-name testroot 
  --file notactuallygunzipped.gz 
  --name "gunzip/notactuallygunzipped.gz"
然后,我使用Azure GO SDK获取斑点。我希望能恢复诸如1 foo bar或任何字节格式之类的东西,而是我
x1fx8bx08x08x9dxfa-Yx00x03notactuallygunzippedx003THxcbxcfWHJ,xe22RHxcaxccKWHxcaxcfKxe7x02x00xa5x00xefx1ex16x00x00x00

如果我将文件重命名为 plaindata.txt之类的东西,它可以正常工作,我得到了我的期望:

'1 foo barn2 fizz buzzn'

Azure会做一些奇怪的事情吗?自动压缩或沿着这些线路?

与Azure无关紧要。您上传的文件notactuallygunzipped.gz是GZIP压缩文件。您可以通过less命令读取它,该命令默认支持看起来像纯文本的Decompress GZIP格式,但如果使用cat,则是二进制格式。因此,您需要通过GO Package compress/gzip从Azure Blob存储中下载斑点的字节。

作为参考,这是我的示例代码,使用go从azure blob存储中读取gzip文件。

package main
import (
    "compress/gzip"
    "fmt"
    "io/ioutil"
    "github.com/Azure/azure-storage-go"
)
func main() {
    accountName := "<your-account-name>"
    accountKey := "<your-account-key>"
    client, _ := storage.NewBasicClient(accountName, accountKey)
    blobClient := client.GetBlobService()
    containerName := "mycontainer"
    container := blobClient.GetContainerReference(containerName)
    flag, _ := container.CreateIfNotExists(nil)
    fmt.Println(flag)
    blobName := "notactuallygunzipped.gz"
    blob := container.GetBlobReference(blobName)
    readCloser, _ := blob.Get(nil)
    defer readCloser.Close()
    zr, _ := gzip.NewReader(readCloser)
    content, _ := ioutil.ReadAll(zr)
    fmt.Printf("%s", content)
}

希望它有帮助。

blob- 二进制大对象

内容或文件扩展名无关紧要。来自Azure文档:

azure blob存储是一种将非结构化数据存储在 云作为对象/斑点。Blob存储可以存储任何类型的文本或 二进制数据,例如文档,媒体文件或应用程序安装程序。 BLOB存储也称为对象存储

最新更新