首页 > 解决方案 > 来自 Azure 容器的 PHP 请求 blob 文件

问题描述

我正在创建一个网站,该网站需要能够从我拥有的 Azure 存储容器中检索文件,但我在实际检索任何文件时遇到了困难。

因此容器的访问策略设置为该Private (no anonymous access)值,因为我不希望任何人都能够访问它。然后我进入 CORS 设置并创建了一个新的 CORS 规则。现在我设置选项如下:

ALLOWED ORIGINS == *
ALLOWED METHODS == GET
ALLOWED HEADERS == *
EXPOSED HEADERS == *
MAX AGE == 10000

我想我应该将我的网站放入该ALLOWED ORIGINS字段以限制仅访问我的网站,但现在我只留下一个*来开始这个。

所以我认为这应该允许我get从我的容器中删除...

这是我尝试在 PHP 中检索文件的方式

$response = file_get_contents("https://<accountname>.blob.core.windows.net/<containername>/SomeSimpleFile.txt");
print_r($response );

但我没有取回文件的内容,而是收到以下错误消息:

[01-Aug-2018 12:58:35 America/Los_Angeles] PHP Warning:  file_get_contents(https://<accountname>.blob.core.windows.net/<containername>/SomeSimpleFile.txt): failed to open stream: HTTP request failed! HTTP/1.1 404 The specified resource does not exist.
in D:\home\site\wwwroot\index.php on line 30

如果我返回 Azure 门户并将容器的访问策略更改为,Blob (anonymous read access for blobs only)那么我可以使用上面的 PHP 代码获取文件。所以我知道我用于文件的 url 是正确的。看来我在 CORS 设置中设置了错误。或者也许是别的东西。

对此我能得到的任何帮助表示赞赏。

标签: phpazureazure-blob-storage

解决方案


该问题是由使用其纯 URL 访问私有 blob 引起的。

您可以使用共享访问签名。借助 SAS,您可以授予客户端访问您存储帐户中资源的权限。

转到门户,您的存储帐户,找到容器中的 blob。右键单击 blob,选择Generate SAS. 您可能会看到下面的内容。

在此处输入图像描述

您可以设置权限、到期时间、允许的 IP 等。然后Generate blob SAS token and URL,将您的 blob url 替换为 Blob SAS URL,一切正常。


推荐阅读