php - 如何使用 PHP 的共享访问签名在 azure 中上传 blob?

标签 php azure azure-blob-storage

我正在使用 azure php SDK,并且拥有从应用程序获得的 SAS 签名,现在如何使用 SAS(共享访问签名)将文件上传到 blob。

最佳答案

如果您有 SAS token ,并且它具有对 Azure 存储帐户中的 blob 的写入权限,则您可以利用 SAS token 将文件直接上传到 Azure 存储,而无需适用于 PHP 的 Azure 存储 SDK。

我假设您拥有带签名的正确 SAS 查询字符串,该字符串应类似于: ?sv=2015-04-05&ss=bt&srt=sco&sp=w&st=2016-09-01T01%3A54%3A00Z&se=2016-09-02T01%3A54%3A00Z&sig=AQ%2F1yL8bt0AQzoYwtQmTUR6UKkJPC4PXg%2B xysdlkMoE%3D

然后,您利用 cUrl 创建到 Azure 存储的 REST API 请求来上传文件,

$sas= '?sv=2015-04-05&ss=bt&srt=sco&sp=rwl&st=2016-09-01T01%3A54%3A00Z&se=2016-09-02T01%3A54%3A00Z&sig=To%2BITizcZWTgr4I6o9BI%2Bdv34CBkuhV5%2BSEQXnaJr%2B0%3D';

$endpoint = 'https://<storage_account>.blob.core.windows.net';
$container = 'test';
$blob = 'test.png';
$url = $endpoint.'/'.$container.'/'.$blob.$sas;

$uploadfile ="test.PNG";
$content = file_get_contents($uploadfile);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('x-ms-blob-type: BlockBlob','Content-Length: ' . strlen($content)));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS,$content);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response  = curl_exec($ch);
curl_close($ch);

您可以引用https://msdn.microsoft.com/en-us/library/azure/dd179451.aspx有关用于将 blob 放入 Azure 存储的 REST API 的更多详细信息。

关于php - 如何使用 PHP 的共享访问签名在 azure 中上传 blob?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39241302/

相关文章:

php - 计算结束日期 : PostgreSQL 的年份

php - 从 Web 界面添加 Ubuntu 用户

azure - 在 Azure 中安装 CloudDrive 快照时出错

sql - Azure SQL 数据库正在失去其容量

javascript - 使用 Javascript 的 Azure blob 客户端加密

encryption - 有关于实时 Azure Blob 加密/解密的教育资源吗?

php - 何时调用 mysqli::close

php - mysql不通过php将长字符串插入数据库

Azure 实时登录可以在本地主机上使用,但在部署到 Azure 时则无法使用

c# - 如何使用 Windows Phone 8 的 Azure 移动服务对多个(连接的)表进行查询?