我们使用 PHP SDK 下载、列出文件并将其上传到 Azure Blob 存储。但是,由于 Microsoft 弃用了 PHP SDK,我们的客户要求我们过渡到推荐的解决方案。
我们尝试使用 Azure CLI 命令上传文件。这是我们使用的代码:
az storage blob upload --account-name <account name> --container-name <container name> --name <blob name> --file <folder/sub-folder/file name> --sas-token DefaultEndpointsProtocol=https;AccountName=<account name>;AccountKey=<account key>
不幸的是,没有成功。在 Stack Overflow 上搜索后,我们找到了一个有助于上传过程的链接,部分解决了我们的问题。
我们现在尝试使用此示例来下载文件,但我们不确定除了 URL 之外还需要更改哪些内容来下载文件。
更新: 我们在 Stack Overflow 上找到了下载文件的解决方案。这是链接。
我们仍在寻找删除文件 API。
更新:我们在Stack Overflow上找到了下载文件的解决方案。我们仍在寻找删除文件 API。
您可以使用下面的代码使用 PHP 从 Azure Blob 存储中删除 blob。
代码:
<?php
$storageAccountName = 'venkat123';
$accessKey = "xxxx";
$containerName = 'test';
$blobName = 'venkat235.wav';
function deleteBlob($storageAccountName, $containerName, $blobName, $accessKey) {
$URL = "https://$storageAccountName.blob.core.windows.net/$containerName/$blobName";
$Date = gmdate('D, d M Y H:i:s \G\M\T');
$headerResource = "x-ms-date:$Date\nx-ms-version:2019-12-12";
$urlResource = "/$storageAccountName/$containerName/$blobName";
$arraysign = array();
$arraysign[] = 'DELETE'; /*HTTP Verb for deletion*/
$arraysign[] = ''; /*Content-Encoding*/
$arraysign[] = ''; /*Content-Language*/
$arraysign[] = ''; /*Content-Length (include value when zero)*/
$arraysign[] = ''; /*Content-MD5*/
$arraysign[] = ''; /*Content-Type*/
$arraysign[] = ''; /*Date*/
$arraysign[] = ''; /*If-Modified-Since */
$arraysign[] = ''; /*If-Match*/
$arraysign[] = ''; /*If-None-Match*/
$arraysign[] = ''; /*If-Unmodified-Since*/
$arraysign[] = ''; /*Range*/
$arraysign[] = $headerResource; /*CanonicalizedHeaders*/
$arraysign[] = $urlResource; /*CanonicalizedResource*/
$str2sign = implode("\n", $arraysign);
$sig = base64_encode(hash_hmac('sha256', urldecode(utf8_encode($str2sign)), base64_decode($accessKey), true));
$authHeader = "SharedKey $storageAccountName:$sig";
$headers = [
'Authorization: ' . $authHeader,
'x-ms-date: ' . $Date,
'x-ms-version: 2019-12-12',
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $URL);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE'); // Setting request method to DELETE
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == 202) { // 202 Accepted indicates successful deletion
echo 'Blob deleted successfully.';
} else {
echo 'Failed to delete blob.';
}
curl_close($ch);
}
deleteBlob($storageAccountName, $containerName, $blobName, $accessKey);
输出:
Blob deleted successfully.
参考: