Попытка загрузить изображение большого двоичного объекта в систему Azure с помощью токена SAS и получить ошибку аутентифPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Гость
 Попытка загрузить изображение большого двоичного объекта в систему Azure с помощью токена SAS и получить ошибку аутентиф

Сообщение Гость »


Я использую систему PHP для доступа к системе больших двоичных объектов и загрузки изображения с токеном SAS. Я могу правильно загружать изображения без токена SAS, общедоступного, но частного токена. Я получаю эту ошибку:

Информация InvalidAuthenticationInfoAuthentication указана в неправильном формате. Проверьте значение заголовка авторизации. Идентификатор запроса: [xxx]**

Я делюсь с вами своим PHP-кодом для этого. Во-первых, у меня есть файл PHP, в который включены две функции для загрузки:

функция getAccessKey(){ вернуть strval("ххх"); } function getSASForBlob($accountName,$container, $blob, $resourceType, $permissions, $expiry) { $key = getAccessKey(); /* Создаём подпись */ $_arraysign = массив(); $_arraysign[] = $разрешения; $_arraysign[] = ''; $_arraysign[] = срок действия $; $_arraysign[] = '/' . $имя_аккаунта . '/' . $контейнер. '/' . $блоб; $_arraysign[] = ''; $_arraysign[] = "14 февраля 2014 г."; //теперь требуется версия API $_arraysign[] = ''; $_arraysign[] = ''; $_arraysign[] = ''; $_arraysign[] = ''; $_arraysign[] = ''; $_str2sign = implode("\n", $_arraysign); вернуть base64_encode( hash_hmac('sha256', urldecode(utf8_encode($_str2sign)), base64_decode($key), true) ); } function uploadBlob($filepath, $storageAccountname, $containerName, $blobName, $_signature) { $accesskey = getAccessKey(); $extUsed = взорваться(".",$filepath)[3]; //$filepath = $filepath.'.'.$extUsed; $Date = gmdate('D, d M Y H:i:s \G\M\T'); $handle = fopen($filepath, "r"); $fileLen = размер файла ($filepath); $blobName = $blobName.".".$extUsed; $URL = "https://$storageAccountname.blob.core.windows.net/$containerName/$blobName"; $expiry = ''; $resourceType = 'б'; $permissions = 'р'; $_parts = массив(); $_parts[] = (!empty($expiry))?'se=' . urlencode($expiry):''; $_parts[] = 'sr=' . $ тип ресурса; $_parts[] = (!empty($permissions))?'sp=' . $permissions:''; $_parts[] = 'sig=' . урленкод ($_signature); $_parts[] = 'sv=2014-02-14'; $URL = $URL. "?" . implode('&', $_parts); $headerResource = "x-ms-blob-cache-control:max-age=3600\nx-ms-blob-type:BlockBlob\nx-ms-date:$Date\nx-ms-version:2017-11-09 "; $urlResource = "/$storageAccountname/$containerName/$blobName"; $extUsed_folded = 'изображение/'.$extUsed; $arraysign = массив(); $arraysign[] = 'PUT'; /*HTTP-глагол*/ $arraysign[] = ''; /*Кодирование контента*/ $arraysign[] = ''; /*Язык содержимого*/ $arraysign[] = $fileLen; /*Content-Length (включить значение, если оно равно нулю)*/ $arraysign[] = ''; /*Содержимое-MD5*/ $arraysign[] = $extUsed_folded /*'application/pdf'*/; /*Тип содержимого*/ $arraysign[] = ''; /*Дата*/ $arraysign[] = ''; /*Если-Изменено-С тех пор */ $arraysign[] = ''; /*Если-совпадение*/ $arraysign[] = ''; /*Если-Нет-Совпадения*/ $arraysign[] = ''; /*Если-немодифицировано-с*/ $arraysign[] = ''; /*Диапазон*/ $arraysign[] = $headerResource; /*Канонизированные заголовки*/ $arraysign[] = $urlResource; /*КанонизированныйРесурс*/ $str2sign = implode("\n", $arraysign); $sig = base64_encode(hash_hmac('sha256', urldecode(utf8_encode($str2sign)), base64_decode($accesskey), true)); // $sig = SignWithAccountKey($str2sign, getAccessKey()); $authHeader = "SharedKey $storageAccountname:$sig"; $header_contentType = "изображение/".$extUsed; переключатель ($ extUsed) { регистр «jpg»: регистр «jpeg»: по умолчанию: перерыв; корпус "png": $header_contentType = "изображение/png"; перерыв; случай «тифф»: $header_contentType = "изображение/TIFF"; перерыв; } $заголовки = [ 'Авторизация: ' . $аутхедер, 'x-ms-blob-cache-control: max-age=3600', 'тип-x-ms-blob: BlockBlob', 'x-ms-дата:' . $Дата, 'x-ms-версия: 2017-11-09', 'Тип контента: '.$header_contentType, 'Длина контента:' . $fileLen ]; $ch = Curl_init(); curl_setopt ($ch, CURLOPT_URL, $URL); Curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, ложь); Curl_setopt ($ ch, CURLOPT_SSL_VERIFYHOST, ложь); Curl_setopt ($ ch, CURLOPT_HTTPHEADER, $headers); Curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, правда); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($ch, CURLOPT_INFILE, $handle); curl_setopt($ch, CURLOPT_INFILESIZE, $fileLen); Curl_setopt ($ ch, CURLOPT_UPLOAD, правда); $result = curl_exec($ch); // echo ('Загружено успешно'); // print_r($result); локон_закрыть ($ ч); $resultsList = массив($URL, $filepath, $result, $blobName, $urlResource, $accesskey); if (isset($resultsList) && is_array($resultsList)) { вернуть $resultsList; } еще { вернуть массив(); } } И после вызова этого с включением в мой основной PHP-код я делаю следующее:

$blobName = 'image-viajes'; $urlAdjunto = ''; $newFilename = '../Imagenes/temp_viajes.jpg'; если (!empty($имя_файла)){ $blobSignature = getSASForBlob('xxx', 'yyy', $blobName, 'б', 'р', ''); echo '
BLOB SIGNATURE
'.$blobSignature.'
'; //$blobFotoAdjunta__url = ''; $blobFotoAdjunta = uploadBlob( $новоеимя_файла, 'ххх', 'гггг', $blobName, $blobSignature); }
Я попытался отказаться от добавления частей URL-адреса в функцию UploadBlob, и он корректно загружается на сервер, но без токена. В тот момент, когда я добавляю переменные GET в URL-адрес, я выдаю эту ошибку. Я создал это на панели Azure для выбранного контейнера.

Я изменил некоторые данные с помощью XXX, yyy и т. д., но могу сказать, что переменные для public верны. Проблема в токене. Если бы вы увидели в этом какую-то проблему, я был бы вам очень благодарен.

Если у вас возникнут вопросы, я готов. Не знаю, правильно ли я объяснил, как надо.

Чтобы загрузить изображение на сервер Azure с помощью частного токена SAS, оно работает неправильно. Публичная загрузка выполнена правильно.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»