使用 php 从子目录中获取 azure blob 文件
Get azure blob files from inside Sub Directories using php
我想尝试从 blob 存储中获取文件。我在没有子目录的情况下从 blob 存储成功获取,但是当我尝试从子目录内部获取文件时,它不起作用。在子目录的情况下,我使用 $blobName like that test/1.png
,其中 test 是文件夹名称和 1.jpg 文件名。
<?php
$storageAccount = 'XXXXXXX';
$containerName = 'XXXXXXXX';
$blobName = 'test/1.png';
$account_key = 'XXXXXXXXXX';
$date = gmdate('D, d M Y H:i:s \G\M\T');
$version = "2019-12-12";
$stringtosign = "GET\n\n\n\n\n\n\n\n\n\n\n\nx-ms-date:". $date . "\nx-ms-version:".$version."\n/".$storageAccount."/".$containerName."/".$blobName;
$signature = 'SharedKey'.' '.$storageAccount.':'.base64_encode(hash_hmac('sha256', $stringtosign, base64_decode($account_key), true));
echo "\n\n" . $signature;
$header = array (
"x-ms-date: " . $date,
"x-ms-version: " . $version,
"Authorization: " . $signature
);
$url="https://$storageAccount.blob.core.windows.net/$containerName/$blobName";
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt ( $ch, CURLOPT_CUSTOMREQUEST, 'GET' );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_HTTPHEADER, $header);
curl_exec ( $ch );
$result = curl_exec($ch);
echo "\n\n" . $result;
if(curl_errno($ch)){
throw new Exception(curl_error($ch));
}
file_put_contents('D://demo//downloaded.txt', $result); // save the string to a file
curl_close($ch);
我已经在我这边测试了你的代码,但看起来你的代码没问题,我可以从存储容器的某个子目录中下载我的 .jpg 文件:
结果:
我在你的代码中注意到,你正在将 .png file
内容下载到 .txt file
:
file_put_contents('D://demo//downloaded.txt', $result);
可能这就是您没有得到异常结果的原因。
我想尝试从 blob 存储中获取文件。我在没有子目录的情况下从 blob 存储成功获取,但是当我尝试从子目录内部获取文件时,它不起作用。在子目录的情况下,我使用 $blobName like that test/1.png
,其中 test 是文件夹名称和 1.jpg 文件名。
<?php
$storageAccount = 'XXXXXXX';
$containerName = 'XXXXXXXX';
$blobName = 'test/1.png';
$account_key = 'XXXXXXXXXX';
$date = gmdate('D, d M Y H:i:s \G\M\T');
$version = "2019-12-12";
$stringtosign = "GET\n\n\n\n\n\n\n\n\n\n\n\nx-ms-date:". $date . "\nx-ms-version:".$version."\n/".$storageAccount."/".$containerName."/".$blobName;
$signature = 'SharedKey'.' '.$storageAccount.':'.base64_encode(hash_hmac('sha256', $stringtosign, base64_decode($account_key), true));
echo "\n\n" . $signature;
$header = array (
"x-ms-date: " . $date,
"x-ms-version: " . $version,
"Authorization: " . $signature
);
$url="https://$storageAccount.blob.core.windows.net/$containerName/$blobName";
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt ( $ch, CURLOPT_CUSTOMREQUEST, 'GET' );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_HTTPHEADER, $header);
curl_exec ( $ch );
$result = curl_exec($ch);
echo "\n\n" . $result;
if(curl_errno($ch)){
throw new Exception(curl_error($ch));
}
file_put_contents('D://demo//downloaded.txt', $result); // save the string to a file
curl_close($ch);
我已经在我这边测试了你的代码,但看起来你的代码没问题,我可以从存储容器的某个子目录中下载我的 .jpg 文件:
结果:
我在你的代码中注意到,你正在将 .png file
内容下载到 .txt file
:
file_put_contents('D://demo//downloaded.txt', $result);
可能这就是您没有得到异常结果的原因。