如何检查Azure Blob存储上传是否成功?

时间:2017-06-06 17:04:41

标签: azure-storage azure-storage-blobs

我使用Azure SAS URL将文件上传到blob存储:

var blockBlob = new Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob(new System.Uri(sasUrl));
blockBlob.UploadFromFile(filePath);

该文件存在于我的磁盘上,并且该URL应该是正确的,因为它是从Windows Store Ingestion API中自动检索的(如果我稍微更改了URL的签名部分中的一个字符,则上传失败, HTTP 403)。

但是,检查时

var blobs = blockBlob.Container.ListBlobs();

结果是Count = 0,所以我想知道上传是否成功?遗憾的是,UploadFromFile方法(与UploadFromStream方法类似)没有返回类型,因此我不确定如何检索上传的结果。

如果我尝试使用Azure Storage Explorer连接到SAS网址,请列出 blob容器因错误" 身份验证错误而失败。签名字段格式不正确" 。我尝试使用URL转义URL的签名部分,因为这似乎是在某些类似情况下出现错误的原因,但这并不能解决问题。

有没有办法检查blob上传的状态?有没有人知道为什么自动生成的URL(由Microsoft的官方API之一提供)无法连接到使用Azure Explorer?

2 个答案:

答案 0 :(得分:2)

请检查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
}

您还可以使用任何Web调试代理工具(例如Fiddler)来确认它,以从存储服务器捕获响应消息。 201如果已成功上载blob,将返回创建的状态代码。

enter image description here

  

有没有人知道为什么自动生成的URL(由Microsoft官方API之一提供)无法连接到使用Azure Explorer?

Azure Storage Explorer仅允许我们使用SAS连接存储帐户或使用SAS连接存储服务(blob容器,队列或表)。它不允许我们使用SAS连接blob项。

答案 1 :(得分:0)

在同步UPLOAD的情况下,我们可以尝试基于异常的方法,也可以交叉检查“ blockBlob.Properties.Length”。在上传文件之前,其值为“ -1”,在上传完成后,其变为上传文件的大小。

因此,我们可以添加检查以验证块长,这将提供有关上传状态的详细信息。

try
{
    blockBlob.UploadFromFile(filePath);
    if(blockBlob.Properties.Length >= 0)
    {
       // File uploaded successfull
       // You can take any action.
    }
}
catch(Exception ex)
{
    //uploaded failed
}