and*_*ask 5 azure-storage azure-blob-storage
我使用 Azure SAS URL 将文件上传到 Blob 存储:
var blockBlob = new Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob(new System.Uri(sasUrl));
blockBlob.UploadFromFile(filePath);
Run Code Online (Sandbox Code Playgroud)
该文件存在于我的磁盘上,并且 URL 应该是正确的,因为它是从 Windows Store Ingestion API 自动检索的(并且,如果我稍微更改 URL 签名部分中的一个字符,上传会失败并显示 HTTP 403)。
然而,在检查时
var blobs = blockBlob.Container.ListBlobs();
Run Code Online (Sandbox Code Playgroud)
结果是Count = 0,所以我想知道是否上传成功?不幸的是,该UploadFromFile方法(与该UploadFromStream方法类似)没有返回类型,因此我不确定如何检索上传的结果)。
如果我尝试使用Azure 存储资源管理器连接到 SAS URL ,则列出 Blob 容器会失败,并显示错误“身份验证错误。签名字段格式不正确”。我尝试使用 URL 转义 URL 的签名部分,因为这似乎是在某些类似情况下出现该错误的原因,但这并不能解决问题。
有什么方法可以检查 blob 上传的状态吗?有人知道为什么无法使用 Azure 资源管理器连接自动生成的 URL(由 Microsoft 的官方 API 之一提供)吗?
请检查 SAS 的 sp 字段。它显示您被授权对 blob 执行的权限。例如,sp=rw 表示您可以使用此 SAS 读取 blob 并将内容写入 blob。sp=w 表示您只能使用此 SAS 将内容写入 blob。
如果您有读取权限,则可以将 SAS URL 复制到浏览器地址栏。浏览器将为您下载或显示 blob 内容。
有什么方法可以检查 blob 上传的状态吗?
如果您的代码没有抛出异常,则意味着 blob 已成功上传。否则,将会抛出异常。
try
{
blockBlob.UploadFromFile(filePath);
}
catch(Exception ex)
{
//uploaded failed
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用任何 Web 调试代理工具(例如 Fiddler)捕获来自存储服务器的响应消息来确认它。如果 blob 上传成功,将返回 201 Created 状态码。
有人知道为什么无法使用 Azure 资源管理器连接自动生成的 URL(由 Microsoft 的官方 API 之一提供)吗?
Azure 存储资源管理器仅允许我们使用 SAS 连接存储帐户或使用 SAS 附加存储服务(blob 容器、队列或表)。它不允许我们使用 SAS 连接 blob 项。