Ошибка MultiPartMimeStreamFormatException при импорте файлов pbix с помощью rest-api - PullRequest
0 голосов
/ 14 февраля 2020

Поэтому я использую PowerShell для автоматизации отчетов Power BI в своем рабочем пространстве с помощью API импорта. вот код, который я использую:

    $PBIXuri="my azure blob storage url",
    $Workspaceurl="https://api.powerbi.com/v1.0/myorg/groups/mygroups/imports?datasetDisplayName=myreportname",
    $AccessToken="my oauth token"

    #download my pbix file from azure blob storage
    $cli = New-Object System.Net.WebClient
    $exportpbix = $cli.DownloadData($PBIXuri)

    $powerBiBody = @'
    --exptest
    Content-Disposition: form-data; name="file";
    Content-Type: application/x-zip-compressed

    {0}
    --exptest--

    '@

    #set my pbix file into request body
    $encoding = [System.Text.Encoding]::GetEncoding('iso-8859-1')
    $body = $powerBiBody -f $encoding.GetString($exportpbix)

    $headers = @{
    "Authorization" = "Bearer " + $AccessToken}

    Invoke-RestMethod -Uri $Workspaceurl -Method Post -Headers $headers -Body $body -ContentType "multipart/form-data; boundary=--exptest"

, но он всегда возвращает ошибку вроде:

Invoke-RestMethod :     {"error":
     {"code":"MultiPartMimeStreamFormatException","pbi.error": 
       {"code":"MultiPartMimeStreamFormatException",
        "parameters":{},
        "details":[],
        "exceptionCulprit":1
        }
      }
    }

где я ошибся в своем коде?

Ответы [ 2 ]

0 голосов
/ 15 февраля 2020

Я нашел проблему. в моем теле запроса тип содержимого, который я установил, был «application / x-zip-compress». в то время как мой файл pbix - «application / stream-octet», после его изменения мои файлы были импортированы правильно.

0 голосов
/ 14 февраля 2020

Для импорта файла заголовки запроса должны содержать Content-Type: multipart / form-data с файлом, закодированным как данные формы в теле запроса, как указано в документации , Тело запроса должно выглядеть следующим образом:

enter image description here

См. Загрузить локальный файл PBIX с помощью API импорта .

Возможно, самый простой способ - попытаться сохранить загруженные данные в файл на диске, скажем, в $filePath, и добавить к вашему вызову параметр -InFile:

Invoke-RestMethod -Uri $Workspaceurl -Method Post -InFile $filePath -ContentType "multipart/form-data"
...