【发布时间】:2020-05-30 09:15:56
【问题描述】:
我正在尝试将文件作为 Blob 上传到 Azure 存储帐户,并且我有一个由此 "github.com/Azure/azure-storage-blob-go/azblob" 包提供的客户端。正如我在文档中看到的那样,应该有可能使用 SAS Token 创建匿名凭证与存储进行通信
credential := azblob.NewAnonymousCredential()
po := azblob.PipelineOptions{
Log: pipeline.LogOptions{
Log: func(s pipeline.LogLevel, m string) {
log.Tracef("pipeline message: %s", m)
},
ShouldLog: func(level pipeline.LogLevel) bool {
return level <= pipeline.LogError
},
},
}
pipeline := azblob.NewPipeline(credential, po)
但是,在我请求访问权限后,我没有看到传递 SAS Token 的选项。
我还尝试使用 Azure 存储帐户 REST API“手动”执行此操作,因此我的 URL 类似于 https://servicename.blob.core.windows.net/containerID/BlobID?sasToken...,但我得到的只是 400、411 和 501 HTTP 代码,具体取决于请求标头。
例如用
req.Header.Add("Accept", "*/*")
req.Header.Add("Accept-Language", "en-US,en;q=0.5 --compressed")
req.Header.Add("Accept-Encoding", "gzip, deflate, br")
req.Header.Add("content-type", "application/octet-stream")
req.Header.Add("x-ms-version", "2019-02-02")
req.Header.Add("x-ms-blob-type", "BlockBlob")
req.Header.Add("x-ms-client-request-id", "someID")
req.Header.Add("Connection", "keep-alive")
req.Header.Add("Content-Length", "512000")
req.Header.Add("Transfer-Encoding", "gzip, chunked, deflate")
我收到了 400 个代码
<?xml version="1.0" encoding="utf-8"?>
<Error>
<Code>MissingRequiredHeader</Code>
<Message>
An HTTP header that's mandatory for this request is not specified.
RequestId:someId
Time:2020-02-14T13:47:58.8383371Z
</Message>
<HeaderName>x-ms-original-content-length</HeaderName>
</Error>
添加 x-ms-original-content-length 标头不会改变任何内容。
有趣的事实是,只有当我在 Go 代码中尝试它时才会发生这种情况。当我尝试任何 REST 客户端时,它正在使用这些标头。
总而言之,我需要将文件作为 blob 放入 Azure 存储帐户,而第二个解决方案应该可以正常工作,但不起作用,第一个解决方案没有完成,因为我看不到通过 @987654329 的方法@。我错过了什么?
【问题讨论】: