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

求助:如何使用Azure Storage File PHP SDK读取存储中PDF并在PHP WebApp展示

用PHP读取Azure File Storage中的PDF并展示的极简实现

我懂你现在的处境——已经装好了Azure Storage File的PHP SDK,但官方示例太复杂,没法直接套用到你的场景里。下面给你一段直接能用的代码,专门用来读取Azure File Storage里的PDF文件,然后在单页网页上展示它们的可访问链接:

第一步:确认依赖(你已经装了可以跳过)

确保你通过Composer安装了官方SDK:

composer require microsoft/azure-storage-file

核心代码片段

<?php
require_once 'vendor/autoload.php';

use MicrosoftAzure\Storage\File\FileRestProxy;
use MicrosoftAzure\Storage\Common\ServiceException;
use MicrosoftAzure\Storage\File\Models\ListFilesOptions;
use MicrosoftAzure\Storage\File\Models\CreateSharedAccessSignatureOptions;
use MicrosoftAzure\Storage\Common\SharedAccessSignatureHelper;

// 1. 替换成你的Azure存储账户信息
$storageAccountName = "你的存储账户名";
$storageAccountKey = "你的存储账户密钥";
$fileShareName = "你的文件共享名称"; // 就是Docker容器挂载的那个共享

// 2. 初始化File服务客户端
$connectionString = "DefaultEndpointsProtocol=https;AccountName=$storageAccountName;AccountKey=$storageAccountKey";
$fileClient = FileRestProxy::createFileService($connectionString);

// 3. 列出共享中的所有PDF文件
$listOptions = new ListFilesOptions();
$listOptions->setPrefix(''); // 如果你想指定某个目录,可以填目录路径,比如"docs/"
try {
    $result = $fileClient->listFilesAndDirectories($fileShareName, $listOptions);
    $files = $result->getFiles();
} catch (ServiceException $e) {
    $code = $e->getCode();
    $errorMessage = $e->getMessage();
    echo "<p>读取文件失败: $code - $errorMessage</p>";
    exit;
}

// 4. 生成SAS令牌(用来让PDF可以公开访问)
$sasHelper = new SharedAccessSignatureHelper($storageAccountName, $storageAccountKey);
$sasOptions = new CreateSharedAccessSignatureOptions();
$sasOptions->setPermissions("r"); // 只读权限,足够预览/下载PDF
$sasOptions->setExpiry(date('Y-m-d\TH:i:s\Z', strtotime('+1 day'))); // 有效期1天,可按需调整

// 5. 网页展示部分
?>
<!DOCTYPE html>
<html>
<head>
    <title>Azure File Storage PDF列表</title>
</head>
<body>
    <h1>存储在Azure File Storage中的PDF文件</h1>
    <?php if (empty($files)): ?>
        <p>目前没有PDF文件</p>
    <?php else: ?>
        <ul>
            <?php foreach ($files as $file): ?>
                <?php
                // 只筛选PDF文件
                if (pathinfo($file->getName(), PATHINFO_EXTENSION) !== 'pdf') {
                    continue;
                }
                // 生成文件的SAS访问链接
                $filePath = "$fileShareName/" . $file->getName();
                $sasToken = $sasHelper->generateFileServiceSharedAccessSignatureToken($filePath, $sasOptions);
                $fileUrl = "https://$storageAccountName.file.core.windows.net/$filePath?$sasToken";
                ?>
                <li>
                    <a href="<?php echo $fileUrl; ?>" target="_blank"><?php echo $file->getName(); ?></a>
                    <small>(点击在新窗口打开PDF)</small>
                </li>
            <?php endforeach; ?>
        </ul>
    <?php endif; ?>
</body>
</html>

关键说明

  • 替换配置信息:把代码里的你的存储账户名、你的存储账户密钥、你的文件共享名称换成你实际的信息,这些都能在Azure门户的存储账户页面找到。
  • SAS令牌:因为Azure File Storage的文件默认是私有的,所以我们生成了带只读权限的SAS令牌,有效期1天,你可以根据需求调整有效期(比如strtotime('+7 day')改成7天)。
  • 目录筛选:如果你的PDF都存在某个子目录里,把$listOptions->setPrefix('')改成目录路径,比如$listOptions->setPrefix('docker-uploads/'),这样只会列出该目录下的文件。
  • 错误处理:代码里加了基本的异常捕获,如果读取文件出错会显示错误码和信息,方便排查问题。

测试注意事项

  • 确保你的PHP WebApp所在的环境能访问Azure File Storage(如果是Azure App Service的话,默认是可以的)。
  • 如果你不想用账户密钥(出于安全考虑),可以后续换成Azure托管标识,但这个代码是最快的测试方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:44:05