如何使用 PHP 使用共享访问签名以 azure 上传 blob?
how can i upload the blob in azure using the shared access signature using PHP?
我正在使用 azure php SDK,并且我有从应用程序获得的 SAS 签名,现在我如何使用 SAS(共享访问签名)将文件上传到 blob。
我们的 PHP tutorial for blobs 展示了如何创建连接字符串,然后上传 blob。
您可以使用 SAS 作为连接字符串的凭据。连接字符串格式为(包含换行符只是为了便于阅读):
BlobEndpoint=myBlobEndpoint;
QueueEndpoint=myQueueEndpoint;
TableEndpoint=myTableEndpoint;
FileEndpoint=myFileEndpoint;
SharedAccessSignature=sasToken
有关更多信息和示例,请参阅 Create a connection string using a shared access signature。
如果你有一个 SAS 令牌,并且它对你的 Azure 存储帐户中的 blob 有写权限,你可以利用 SAS 令牌将你的文件直接上传到 Azure 存储,而无需用于 [=22= 的 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%2BxysdlkMoE%3D
然后您利用 cUrl
创建 REST API 请求到 Azure 存储以上传您的文件,
$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 的更多详细信息。
我正在使用 azure php SDK,并且我有从应用程序获得的 SAS 签名,现在我如何使用 SAS(共享访问签名)将文件上传到 blob。
我们的 PHP tutorial for blobs 展示了如何创建连接字符串,然后上传 blob。
您可以使用 SAS 作为连接字符串的凭据。连接字符串格式为(包含换行符只是为了便于阅读):
BlobEndpoint=myBlobEndpoint;
QueueEndpoint=myQueueEndpoint;
TableEndpoint=myTableEndpoint;
FileEndpoint=myFileEndpoint;
SharedAccessSignature=sasToken
有关更多信息和示例,请参阅 Create a connection string using a shared access signature。
如果你有一个 SAS 令牌,并且它对你的 Azure 存储帐户中的 blob 有写权限,你可以利用 SAS 令牌将你的文件直接上传到 Azure 存储,而无需用于 [=22= 的 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%2BxysdlkMoE%3D
然后您利用 cUrl
创建 REST API 请求到 Azure 存储以上传您的文件,
$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 的更多详细信息。