在Azure SQL数据库中存储文件

时间:2014-10-17 14:10:26

标签: vb.net azure

我有一个基于vb.net的应用程序,它引用了一个Azure SQL数据库,我已经设置了一个存储帐户,我想将文件存储到应用程序中。我不确定如何在数据库和存储帐户之间创建该链接?

浏览Windows Azure存储服务中的" SQL Server数据文件"教程我无法为sotrage blob创建URI。使用Azure存储资源管理器我选择我的容器进入安全性并生成一个一切正常的签名。当我使用"在浏览器中测试"来测试URI时按钮我收到此错误:

 <Error>
 <Code>AuthenticationFailed</Code>
 <Message>
 Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature. RequestId:22ab2830-0001-001d-67a0-5460bb000000 Time:2014-10-17T14:06:11.9864269Z
 </Message>
 <AuthenticationErrorDetail>
 Signature did not match. String to sign used was r 2014-10-17T06:00:00Z 2014-10-25T06:00:00Z /macrocitrus/$root 2014-02-14
 </AuthenticationErrorDetail>
 </Error>

这意味着我不知道。我是Windows Azure的全新用户,所以我甚至不确定我是否在正确的轨道上?

是否有任何文档实际上解释了允许从SQL DB到Azure存储帐户的存储访问所需的步骤或内容?

1 个答案:

答案 0 :(得分:0)

我不建议在SQL数据库中保存二进制内容。相反,我建议您将它们保存在blob存储中。以下是我这样做的原因:

  • Blob存储是专为此目的而设计的。
  • 在blob存储中存储数据要比在SQL数据库中存储数据便宜得多。
  • 通过将二进制数据与其他数据一起存储,您不必要地使您的数据访问层更加庞大,因为所有数据都将通过您的数据库进行流式传输。

在这些场景中的一般方法是将blob存储中的二进制数据保存为blob(将blob视为云中的文件)。由于每个blob都有一个唯一的URL,因此您只需将URL存储在SQL数据库表中即可。因此,如果我们采用这种方法,您将要做的是首先在blob存储中上传blob,获取其URL然后更新数据库。

如果你在blob存储中搜索上传文件,我相信你会发现很多带有源代码的例子(所以我不打算在这里提供它:);我希望它没事。)

现在遇到你正在犯的错误。基本上,您使用Azure存储资源管理器创建的链接称为Shared Access Signature (SAS) URL,它基本上授予对存储帐户的时间限制/权限限制访问权限。现在,Azure Storage Explorer为您提供了容器的SAS URL。您可以通过两种方式使用该网址(假设您在创建SAS网址时授予了ReadList权限:

  • 要列出该容器中的blob,只需将restype=container&comp=list附加到您的URL,然后将其粘贴到浏览器中,您将看到所有blob的XML列表。
  • 要下载blob,您需要在URL中插入blob的名称。因此,如果您的网址类似于https://[youraccount].blob.core.windows.net/[yourcontainer]?[somestuffhere]且您的blob名称为myawesomepicture.png,那么您在浏览器中查看该文件的SAS网址将为https://[youraccount].blob.core.windows.net/[yourcontainer]/myawesomepicture.png?[somestuffhere]

我写了一篇关于使用共享访问签名的博客文章,您可能会发现它很有用:http://gauravmantri.com/2013/02/13/revisiting-windows-azure-shared-access-signature/