求助:如何使用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
相关产品推荐
相关产品推荐

