Сохранение файлов в хранилище BLOB-объектов - PullRequest
0 голосов
/ 15 октября 2019

Я выполняю вызов API с помощью PowerShell через Azure Automation и хотел сохранить файлы JSON непосредственно в хранилище BLOB-объектов без необходимости сначала что-либо сохранять на локальном компьютере, а затем перенести файлы JSON в хранилище BLOB-объектов, поскольку этот процесс будетиспользоваться другими. Возможно ли сохранение файлов JSON непосредственно в хранилище BLOB-объектов, не затрагивая локальный компьютер? Я рад изменить свой подход к сохранению файлов JSON непосредственно в хранилище BLOB-объектов.

ОБНОВЛЕННЫЙ Код API

$access_token ="Access_Token"
$URI =  "https://XXXXX"
$headers = @{“authorization” = “Bearer $access_token”} 
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$result = Invoke-RestMethod -Uri $URI -Headers $headers -ContentType $ContentType |ConvertTo-Json
$Result|ConvertFrom-Json| Select -ExpandProperty Forms

РЕЗУЛЬТАТ:

{
    "quiz": {
        "sport": {
            "q1": {
                "question": "Which one is correct team name in NBA?",
                "options": [
                    "New York Bulls",
                    "Los Angeles Kings",
                    "Golden State Warriros",
                    "Huston Rocket"
                ],
                "answer": "Huston Rocket"
            }
        },
        "maths": {
            "q1": {
                "question": "5 + 7 = ?",
                "options": [
                    "10",
                    "11",
                    "12",
                    "13"
                ],
                "answer": "12"
            },
            "q2": {
                "question": "12 - 8 = ?",
                "options": [
                    "1",
                    "2",
                    "3",
                    "4"
                ],
                "answer": "4"
            }
        }
    }
}

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Я не думаю, что мы можем экспортировать файл json напрямую в хранилище BLOB-объектов, мы должны использовать средний мост (промежуточное хранилище), чтобы передать файл в хранилище BLOB-объектов. Для получения подробной информации см. Быстрый запуск: загрузка, загрузка и просмотр больших двоичных объектов с помощью Azure PowerShell .

Если вы имеете в виду конвейер AzOv DevOps, вы можете экспортировать файл json в промежуточную папку вагента, затем используйте задачу Копировать файл Azure , чтобы загрузить файл в хранилище блога.

enter image description here

0 голосов
/ 16 октября 2019

Это можно сделать с помощью хранилища BLOB-объектов Azure в Runbook.

Сначала , вам нужно импортировать Microsoft.WindowsAzure.Storage.dll в хранилище BLOB-объектов Azure в качестве модуля в модуле Runbook. Выполните следующие действия:

1.Получите Microsoft.WindowsAzure.Storage.dll. Если вы не знаете, как его получить, просто откройте Visual Studio -> создайте проект консоли .net Framework -> затем щелкните правой кнопкой мыши проект консоли -> Управление пакетами Nuget, затем найдите и загрузите хранилище BLOB-объектов Azure SDK * 1009. * WindowsAzure.Storage

2.После установки пакета соберите консольный проект, затем в папке bin -> debug вы увидите Microsoft.WindowsAzure.Storage.dll.

3.PutMicrosoft.WindowsAzure.Storage.dll в zip-файл с именем Microsoft.WindowsAzure.Storage.zip

4. Перейдите на портал Azure -> свою учетную запись автоматизации -> на левой панели нажмите «Модули» -> Добавить модуль -> выберите. zip-файл на шаге 2. Вам нужно подождать несколько минут, чтобы модуль завершил загрузку (когда он завершает загрузку, вы можете найти статус Microsoft.WindowsAzure.Storage module is Available ), см. снимок экрана ниже:

enter image description here

Во-вторых , создайте модуль запуска powershell и напишите код, как показано ниже. Здесь я просто загружаю строку, используя метод UploadText("your_string_text"). Обратите внимание, что , так как SDK предоставляет много способов загрузки, вы должны проверить возвращаемое значение из api в формате text / stream / byte, а затем выбрать правильный метод загрузки, например UploadFromStream(your_stream) / UploadFromByteArray(byte[] buffer, int index, int count):

Write-Output "start the test"

Add-Type -Path "C:\Modules\User\Microsoft.WindowsAzure.Storage\Microsoft.WindowsAzure.Storage.dll"

$access_token ="Access_Token"
$URI =  "https://XXXXX"
$headers = @{“authorization” = “Bearer $access_token”} 
[Net.ServicePointManager]::SecurityProtocol = 
[Net.SecurityProtocolType]::Tls12
$result = Invoke-RestMethod -Uri $URI -Headers $headers -ContentType $ContentType |ConvertTo-Json
$blob_content_to_upload = $Result|ConvertFrom-Json| Select -ExpandProperty Forms

$account_name = "xxx"
$account_key = "xxx"
$container_name = "test1"
$blob_name = "testfile3.txt"

Write-Output "start communicate with blob storage"

$creds = New-Object "Microsoft.WindowsAzure.Storage.Auth.StorageCredentials" -ArgumentList $account_name,$account_key

$storageAccount = New-Object "Microsoft.WindowsAzure.Storage.CloudStorageAccount" -ArgumentList $creds,$true
$cloudBlobClient = $storageAccount.CreateCloudBlobClient()
$cloudBlobContainer = $cloudBlobClient.GetContainerReference($container_name)
$myblob = $cloudBlobContainer.GetBlockBlobReference($blob_name)

#note that the sdk also provides other methods like UploadFromStream(your_stream) / UploadFromByteArray(byte[] buffer, int index, int count), you can choose the proper method for your purpose.
$myblob.UploadText($blob_content_to_upload)

Write-Output("***the test is completed***")

Затем вы можете запустить модуль Runbook, после его завершения вы увидите, что большой двоичный объект создается в хранилище BLOB-объектов с соответствующим содержимым. Обратите внимание, что во время работы, может быть, ошибка говорит о загрузке модулей, но это не имеет значения.

Результат теста, блоб создается в хранилище больших двоичных объектов.

enter image description here

Если вы хотите указать тип содержимого, просто добавьтеэта строка кода: $myblob.Properties.ContentType = "your_content_type"

...