在 Azure SQL 数据库中存储文件

Kyl*_*fat 1 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>
Run Code Online (Sandbox Code Playgroud)

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

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

Gau*_*tri 5

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

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

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

如果你在 blob 存储中搜索上传文件,我相信你会找到很多带有源代码的示例(所以我不会在这里提供它:);我希望一切顺利)。

现在来到你得到的错误。基本上,您使用 Azure 存储资源管理器创建的链接被称为Shared Access Signature (SAS) URL基本上授予对您的存储帐户的时间限制/权限绑定访问。现在 Azure 存储资源管理器为你提供了容器的 SAS URL。您可以通过两种方式使用该 URL(假设您在创建 SAS URL 时授予Read&List权限:

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

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