php - 来自 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 设置中设置了错误。或者也许是别的东西。
对此我能得到的任何帮助表示赞赏。
解决方案
该问题是由使用其纯 URL 访问私有 blob 引起的。
您可以使用共享访问签名。借助 SAS,您可以授予客户端访问您存储帐户中资源的权限。
转到门户,您的存储帐户,找到容器中的 blob。右键单击 blob,选择Generate SAS
. 您可能会看到下面的内容。
您可以设置权限、到期时间、允许的 IP 等。然后Generate blob SAS token and URL
,将您的 blob url 替换为 Blob SAS URL,一切正常。
推荐阅读
- manifest - 反应应用程序图标/清单未显示在gh页面上
- kubernetes - eks worker节点公网ip分配
- c# - 如何从以变量为键的 DataTable 生成 JSON
- ms-access - Access 数据库超过 5000 个项目,因此在 SharePoint 中不起作用
- apache-spark - spark-submit --files hdfs://file 缓存在驱动程序的 /tmp 中
- selenium - 在appium中获取数据提供者异常
- spring - Spring 集成 http-inbound-gateway / RequestMappingHandlerMapping
- javascript - 如果其他元素具有该类,如何停止将类添加到元素中?
- javascript - 循环 JSON 对象以检查给定值是否存在
- javascript - 如何从javascript转换维恩图代码