Azure загрузка blob с набором content-md5 - PullRequest
1 голос
/ 29 мая 2020

Цель: загрузить файл в Azure хранилище BLOB-объектов и установить MD5, который может быть проверен при загрузке файла пользователем.

Использование Azure CLI Powershell.

Get-FileHash -Algorithm MD5 .\AutoSetup.zip
Algorithm       Hash                                             Path
---------       ----                                             ----
MD5             693EF0DB938308AC2C362F50F7CB9F9F                 C:\MyFiles\AutoSetup.zip

az storage blob upload --account-name mystorageaccount --container-name mycontainername --file AutoSetup.zip --name Autosetup2.zip --content-md5 693EF0DB938308AC2C362F50F7CB9F9F
Finished[#############################################################]  100.0000%
The MD5 value specified in the request is invalid. MD5 value must be 128 bits and base64 encoded. ErrorCode: InvalidMd5
<?xml version="1.0" encoding="utf-8"?><Error><Code>InvalidMd5</Code><Message>The MD5 value specified in the request is invalid. MD5 value must be 128 bits and base64 encoded.
RequestId:9f27334a-801e-0028-6db4-3539c5000000
Time:2020-05-29T12:28:23.7677258Z</Message></Error>

Edit 1:

Я также пытался получить ha sh этим способом

$someFilePath = "C:\MyFiles\AutoSetup.zip"
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$hash = [System.BitConverter]::ToString($md5.ComputeHash([System.IO.File]::ReadAllBytes($someFilePath)))
Write-Host $hash
69-3E-F0-DB-93-83-08-AC-2C-36-2F-50-F7-CB-9F-9F

Кажется, что независимо от того, что я делаю, MD5, который для файла возвращается 693EF0DB938308AC2C362F50F7CB9F9F, но Azure не принимает его ...

Редактировать 2:

Я сгенерировал случайный 128-битный строка $B&E)H@McQfTjWnZ и приступил к ее кодированию в Base64, что дало мне JEImRSlIQE1jUWZUalduWg==. Когда я пытаюсь загрузить большой двоичный объект с THAT ha sh, я получаю другое сообщение об ошибке:

The MD5 value specified in the request did not match with the MD5 value calculated by the server. ErrorCode: Md5Mismatch

Приведенное выше делает смысл, потому что я только что создал случайную 128-битную кодировку base64 ha sh. Однако теперь мне интересно, почему команда Powershell Get-FileHash дает мне то, что кажется неправильным?

Что может вызывать ошибку?

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Попробуйте преобразовать ha sh в строку в кодировке Base64. Что-то вроде:

$someFilePath = "C:\MyFiles\AutoSetup.zip"
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider    
$hash = [System.Convert]::ToBase64String($md5.ComputeHash([System.IO.File]::ReadAllBytes($someFilePath)))
Write-Host $hash
8SzzdVQAV4Wdbp8Z9qsczg==
0 голосов
/ 29 мая 2020

Я хотел добавить к этому свое собственное «решение» на всякий случай, если кто-то предпочтет этот подход.

Подход 1 описан в ответе Гауравом. Мы читаем байты из файла, вычисляем MD5 и кодируем его с помощью Base64. Это приведет к строке MD5, которую az storage blob upload проверит и примет. Кажется, это правильный путь.

Подход 2 заключается в том, чтобы загрузить файл без установки content-md5 и обновить его после.

Получить MD5 ha sh

Get-FileHash -Algorithm MD5 .\AutoSetup.zip
Algorithm       Hash                                             Path
---------       ----                                             ----
MD5             693EF0DB938308AC2C362F50F7CB9F9F                 C:\MyFiles\AutoSetup.zip

Загрузить большой двоичный объект без MD5

az storage blob upload --account-name mystorageaccount --container-name mycontainername --file AutoSetup.zip --name Autosetup2.zip
Finished[#############################################################]  100.0000%

Обновите большой двоичный объект с помощью content-md5. Мы можем записать здесь все, что захотим, так что использовать MD5 из более раннего можно!

az storage blob update --account-name mystorageaccount --container-name mycontainername --name Autosetup2.zip -- content-md5 693EF0DB938308AC2C362F50F7CB9F9F

Я не знаю, насколько верен второй подход, но он тем не менее будет работать.

...