Я вижу, вы хотите напрямую отобразить файл PDF из хранилища файлов Azure на веб-странице. Как правило, рекомендуется создавать URL-адрес файла с токеном sas в хранилище файлов Azure.
Поэтому я следовал репозиторию GitHub Azure/azure-storage-php
, чтобы установить Azure File Storage SDK для PHP в моем образце. project, вот мой пример кода и его зависимости.
Файловая структура моего примера проекта показана на рисунке ниже.
Содержимое моего файла composer.json
показано ниже.
{
"require": {
"microsoft/azure-storage-file": "*"
}
}
Мой пример PHP-файла demo.php
выглядит следующим образом: он вдохновлен функцией generateFileDownloadLinkWithSAS
официального примера azure-storage-php/samples/FileSamples.php
.
<?php
require_once "vendor/autoload.php";
use MicrosoftAzure\Storage\Common\Internal\Resources;
use MicrosoftAzure\Storage\File\FileSharedAccessSignatureHelper;
$accountName = "<your account name>";
$accountKey = "<your account key>";
$shareName = "<your share name>";
$fileName = "<your pdf file name>";
$now = date(DATE_ISO8601);
$date = date_create($now);
date_add($date, date_interval_create_from_date_string("1 hour"));
$expiry = str_replace("+0000", "Z", date_format($date, DATE_ISO8601));
$helper = new FileSharedAccessSignatureHelper($accountName, $accountKey);
$sas = $helper->generateFileServiceSharedAccessSignatureToken(
Resources::RESOURCE_TYPE_FILE,
"$shareName/$fileName",
'r', // Read
$expiry // A valid ISO 8601 format expiry time, such as '2020-01-01T08:30:00Z'
);
$fileUrlWithSAS = "https://$accountName.file.core.windows.net/$shareName/$fileName?$sas";
echo "<h1>Demo to display PDF from Azure File Storage</h1>";
echo "<iframe src='$fileUrlWithSAS' width='800' height='500' allowfullscreen webkitallowfullscreen></iframe>";
?>
В результате моя веб-страница выглядит так, как показано на рисунках ниже в Chrome и Firefox.
Результат в Хроме:
Результат в Firefox:
Обновление: код для отображения файлов в общей папке, как показано ниже.
<?php
require_once "vendor/autoload.php";
use MicrosoftAzure\Storage\File\FileRestProxy;
$accountName = "<your account name>";
$accountKey = "<your account key>";
$shareName = "<your share name>";
$connectionString = "DefaultEndpointsProtocol=https;AccountName=$accountName;AccountKey=$accountKey";
$fileClient = FileRestProxy::createFileService($connectionString);
$list = $fileClient->listDirectoriesAndFiles($shareName);
function endsWith( $str, $sub ) {
return ( substr( $str, strlen( $str ) - strlen( $sub ) ) === $sub );
}
foreach($list->getFiles() as &$file) {
$fileName = $file->getName();
if(endsWith($fileName, ".pdf")) {
echo $fileName."\n";
}
};
?>
person
Peter Pan
schedule
30.01.2020