Хранилище файлов Azure с использованием PHP

Я хочу запустить одну веб-страницу для отображения файлов, которые хранятся в хранилище файлов Azure. Это должно быть хранилище файлов Azure, так как эти файлы поступили из контейнера Docker, который подключен к этому хранилищу файлов.

У меня есть экземпляр контейнера Azure, который хранит файлы PDF в хранилище файлов Azure. Теперь я запускаю WebApp (PHP), который будет читать все PDF-файлы.

Я установил PHP SDK Microsoft Azure Storage File, но понятия не имею, как его использовать. Даже sample.php Не помогло мне выступление вперед. Было бы очень полезно, если бы кто-нибудь помог мне немного пострелять.

Сервис


person lordisp    schedule 30.01.2020    source источник
comment
Вы можете посмотреть на github.com/thephpleague/flysystem-azure.   -  person alithedeveloper    schedule 30.01.2020


Ответы (1)


Я вижу, вы хотите напрямую отобразить файл 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
comment
это очень близко к тому, что я ищу, или, лучше сказать, второй шаг, чтобы открыть/загрузить PDF. На первом этапе мне нужно просмотреть общий доступ к файлам, чтобы просмотреть список всех сохраненных файлов PDF. Скажем, если я верну массив, я могу построить таблицу, и тогда ваш код (я уже успешно протестировал его) будет вторым шагом. - person lordisp; 31.01.2020
comment
@RafaelCamisonR Я обновил свой ответ для кода первого шага, чтобы вывести список файлов с суффиксом .pdf. - person Peter Pan; 01.02.2020