You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PHP直接调用Azure Storage REST API上传Blob至容器?

PHP直接调用Azure Storage REST API上传PDF到Blob存储

以下是一个可行的示例,直接通过PHP调用Azure Blob Storage的REST API上传PDF文件,使用Shared Key进行身份验证:

前置准备

确保你有以下信息:

  • Azure存储账户名称
  • 存储账户访问密钥(主密钥或辅密钥)
  • 目标Blob容器名称(需提前创建)
  • 要上传的本地PDF文件路径

完整代码示例

<?php
// 配置信息
$storageAccount = "your-storage-account-name";
$accountKey = "your-storage-account-key";
$containerName = "your-container-name";
$localFilePath = "/path/to/your/file.pdf";
$blobName = "uploaded-file.pdf"; // Blob存储中的文件名

// 读取文件内容和大小
$fileContent = file_get_contents($localFilePath);
$fileSize = filesize($localFilePath);
if ($fileContent === false) {
    die("无法读取本地PDF文件");
}

// 构造请求URL
$endpoint = "https://{$storageAccount}.blob.core.windows.net/{$containerName}/{$blobName}";

// 设置请求头
$currentDate = gmdate("D, d M Y H:i:s T");
$headers = [
    "x-ms-date: {$currentDate}",
    "x-ms-version: 2020-08-04", // 使用支持的API版本,可按需调整
    "x-ms-blob-type: BlockBlob",
    "Content-Type: application/pdf",
    "Content-Length: {$fileSize}"
];

// 构造签名字符串(严格遵循Azure签名规则,顺序不可错)
$resource = "/{$storageAccount}/{$containerName}/{$blobName}";
$stringToSign = "PUT\n\n\n{$fileSize}\n\napplication/pdf\n\n\n\n\n\n\nx-ms-blob-type:BlockBlob\nx-ms-date:{$currentDate}\nx-ms-version:2020-08-04\n{$resource}";

// 生成Shared Key签名
$decodedKey = base64_decode($accountKey);
$signature = base64_encode(hash_hmac("sha256", $stringToSign, $decodedKey, true));
$authorizationHeader = "SharedKey {$storageAccount}:{$signature}";
$headers[] = "Authorization: {$authorizationHeader}";

// 发送PUT请求
$ch = curl_init($endpoint);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS, $fileContent);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode === 201) {
    echo "PDF文件上传成功!";
} else {
    echo "上传失败,HTTP状态码:{$httpCode},响应内容:{$response}";
}

curl_close($ch);
?>

关键说明

  1. Shared Key签名构造:
    • 签名字符串必须严格按Azure规定的顺序拼接,空值字段需保留换行符
    • x-ms-version建议使用官方支持的最新版本,避免兼容性问题
  2. 请求头注意事项:
    • x-ms-blob-type必须设为BlockBlob,这是最通用的Blob存储类型
    • Content-Type设置为application/pdf,确保Blob元数据正确识别文件类型
  3. 错误排查:
    • 返回403错误通常是签名构造错误,检查签名字符串的顺序、日期格式、资源路径是否匹配
    • 返回404错误需确认容器是否存在,或存储账户/容器名称拼写无误

内容的提问来源于stack exchange,提问作者Mike Talbot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 15:12:28