2016-08-31 66 views

回答

1

如果您有SAS令牌,并且您的Azure存储帐户拥有对blob的写入权限,则可以利用SAS令牌将文件直接上传到Azure存储,而无需Azure存储SDK for PHP。

我假设你有正确的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); 

有关将Blob放入Azure存储的REST API的更多详细信息,请参阅https://msdn.microsoft.com/en-us/library/azure/dd179451.aspx

+0

谢谢@Gary Liu - MSFT我正在寻找这个下一次我会问完全详细的问题..并再次感谢:) –

0

我们的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的更多信息和示例。

+0

你能提供特定的语法吗?我试过做BlobEndpoint = [myendpoint]; SharedAccessSignature = [我的SAS令牌],并得到一个错误“在预期的配置设置键找不到设置键'SharedAccessSignature':UseDevelopmentStorage DevelopmentStorageProxyUri DefaultEndpointsProtocol AccountName AccountKey BlobEndpoint QueueEndpoint TableEndpoint in vendor/microsoft/azure-storage/src/Common/Internal/ServiceSettings.php“ –

相关问题