从已弃用的 Azure PHP SDK 过渡到 Azure CLI 以进行 Blob 存储操作

问题描述 投票:0回答:1

我们使用 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 上搜索后,我们找到了一个有助于上传过程的链接,部分解决了我们的问题。

直接从 PHP 调用 Azure 存储 REST API

我们现在尝试使用此示例来下载文件,但我们不确定除了 URL 之外还需要更改哪些内容来下载文件。

更新: 我们在 Stack Overflow 上找到了下载文件的解决方案。这是链接。

使用共享访问密钥使用 PHP 下载 blob

我们仍在寻找删除文件 API。

php azure rest azure-blob-storage
1个回答
0
投票

更新:我们在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.

Blob deletion result

参考:

删除 Blob (REST API) - Azure 存储 |微软学习

© www.soinside.com 2019 - 2024. All rights reserved.