来自Azure容器的PHP请求Blob文件

时间:2018-08-01 20:44:08

标签: php azure azure-storage-blobs

我正在创建一个网站,该网站需要能够从我拥有的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代码获取文件。因此,我知道该文件使用的网址是正确的。似乎我在CORS设置中设置了错误。或者也许是其他东西。

对此我能提供的任何帮助都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

此问题是由使用其普通URL访问私有Blob引起的。

您可以使用shared access signature。使用SAS,您可以授予客户端访问存储帐户中资源的权限。

转到门户网站(您的存储帐户),在容器中找到该blob。右键单击Blob,选择Generate SAS。您可能会在下面看到内容。

enter image description here

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