【问题标题】:how do you use rest to put a .csv file onto a storage account?您如何使用 rest 将 .csv 文件放入存储帐户?
【发布时间】:2021-11-20 14:01:46
【问题描述】:

如何使用此处的重新输入代码将数据以 .csv 格式上传到存储帐户

  1. 获取令牌

  2. 使用 invoke-rest 方法获取请求。

  3. 将 csv 中的数据导出到存储帐户

    $Request = Invoke-RestMethod @ParamRequest

    Request.value.properties |导出-csv -path $path -NoTypeInformation

API:https://docs.microsoft.com/en-us/rest/api/consumption/usage-details/list

【问题讨论】:

  • 是否有理由要使用 REST API 而不是直接使用 Azure PowerShell cmdlet?此外,您的问题缺乏细节。请提供更多详细信息。
  • 是的,我正在使用 powershell cmdlet 来调用 rest-method。我遇到的问题是,如何将其放入存储帐户?
  • 你真的不需要这样做(调用rest-method)。您可以简单地使用Set-AzStorageBlobContent 在 Azure 存储中上传 CSV 文件。
  • 不,数据来自invoke rest-method。存储在我的计算机上的 .csv 是我不需要的,因为它需要已经存储在存储帐户中。那么问题来了,如何将存储账户中的数据转成.csv文件格式?
  • 但在您的 PowerShell 代码中,您将内容写入 CSV 文件 (export-csv -path $path -NoTypeInformation)。是不是要避免直接把响应数据转成CSV格式上传?

标签: azure powershell rest azure-storage


【解决方案1】:

不是真正的 PowerShell 专家 :) 但本质上的想法是为 blob 创建一个共享访问签名 (SAS) URL,然后使用该 SAS URL 将内容直接上传到 Azure 存储。

这是我想出的:

$accountName = "storage-account-name"
$accountKey = "storage-account-key"
$containerName = "blob-container-name"
$blobName = "blob-name.csv"

# Get storage context
$context = New-AzStorageContext -StorageAccountName $accountName -StorageAccountKey $accountKey

# Get Shared Access Signature (SAS) Token expiration time. I have set it to expire after 1 hour.
$sasExpiry = (Get-Date).AddHours(1).ToUniversalTime()

# Get a SAS Token with "write" permission that will expire after one hour.
$sasToken =  New-AzStorageBlobSASToken -Context $context -Container $containerName -Blob $blobName -Permission "w" -ExpiryTime $sasExpiry

# Create a SAS URL
$sasUrl = "https://$accountName.blob.core.windows.net/$containerName/$blobName$sasToken"

# Set request headers
$headers = @{"x-ms-blob-type":"BlockBlob"}

# Set request content (body)

$body = "This is the content I wish to upload"

#Invoke "Put Blob" REST API

Invoke-RestMethod -Method "PUT" -Uri $sasUrl -Body $body -Headers $headers -Content-Type "text/csv"

【讨论】:

  • 不确定这是否意味着什么,但是我知道您使用 blob 容器中的 SAS url 将内容直接上传到 Azure 存储。我现在收到 Invoke-RestMethod: Authentication Failed Server failed to authenticate request。确保授权标头的值正确形成,包括签名
  • 请编辑您的问题并包含完整的代码,我会看看。此错误通常意味着您的 SAS 令牌有问题。
  • 是的,你是对的,问题是 sas 令牌需要存在于 blob 级别,而不是容器。我需要调整 invoke-rest 方法以在容器级别写入文件。非常感谢您的帮助!
  • 您还可以在容器级别创建 SAS 令牌。您只需使用 New-AzStorageContainerSASToken 而不是 New-AzStorageBlobSASToken。 HTH。
猜你喜欢
  • 1970-01-01
  • 2018-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
  • 2022-12-21
相关资源
最近更新 更多