我有一个名为 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存储也称为对象存储