循环通过 REST 端点以读取文档并写入 Azure Blob 存储

Loop through REST endpoint to read document and write to Azure Blob storage

使用下面的 PowerShell 代码读取端点并将结果写入 blob 存储。但是,如果端点有多个文件。我们如何遍历每个文档并将结果作为单独的文件(file1、file2 ....)写入 blob 存储中。如果单独的文件不可能,我希望将所有文档存储在一个 JSON 文件中 (FILE.JSON).

例如:

端点------------blob存储

doc1----------------file1.json

doc2----------------file2.json

等等

或者以上方法不可行:

doc1、doc2...所有文档========>转到file.json

#$Credential = 获取凭证

$Params = @{
"URI"            = 'https://e832702c-faad-46e5-a585-885b8613c2ce-bluemix.cloudant.com/testdb/_all_docs?include_docs=true'
#"Authentication" = 'Basic'
#"Credential"     = $Credential
}

$Result = (Invoke-RestMethod @Params).rows.doc | ConvertTo-Json -Depth 100

Write-Host "the result is :" $Result 

$context=New-AzStorageContext -StorageAccountName "genstorage999" -StorageAccountKey "<your key>"

$container=Get-AzStorageContainer -Name "blobcontainer" -Context $context

$content = [system.Text.Encoding]::UTF8.GetBytes($Result)

$container.CloudBlobContainer.GetBlockBlobReference("testapp2.json").UploadFromByteArray($content,0,$content.Length)

代码参考:

根据你之前的问题和你的描述,结果数据中会有一些行,每个 row 会有一个 doc。如果请求响应中会有多行,您希望将 doc 内容写入存储中的单独 .json 文件。我假设您的结果数据来自此 link(仅用于演示的模拟 API):https://stantest1016.blob.core.windows.net/static/result.json,其结果包含 2 行:

您可以尝试下面的代码来满足您的要求:

$storageAccountKey= '<your key>' 

$context = New-AzStorageContext -StorageAccountName '<account name>' -StorageAccountKey $storageAccountKey

$container = Get-AzStorageContainer -Name 'testc' -Context $context 


$result = Invoke-RestMethod -Uri 'https://stantest1016.blob.core.windows.net/static/result.json' 

foreach($row in $result.rows){
    $destBlobName ="doc_" + $row.doc._id + ".json"
    $contentText = $row.doc | ConvertTo-Json -Compress
    $container.CloudBlobContainer.GetBlockBlobReference($destBlobName).UploadTextAsync($contentText)
}

结果:

如果您有任何其他问题,请告诉我。