使用 rest-api 导入 pbix 文件时出现 MultiPartMimeStreamFormatException 错误

MultiPartMimeStreamFormatException error when importing pbix files using rest-api

所以我使用 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"

但它总是 return 错误,例如:

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

我的代码哪里出错了?

要导入文件,请求 Headers 应包括 Content-Type: multipart/form-data 并将文件编码为请求中的表单数据 body,如 documentation 中所述。请求 body 应如下所示:

参见 Upload a local PBIX file using the import API

也许最简单的方法是尝试将下载的数据保存到磁盘上的文件中,比方说在 $filePath 中,然后将 -InFile 参数添加到您的调用中:

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

我找到问题了。 在我的请求正文中,我设置的内容类型是 "application/x-zip-compressed"。 虽然我的 pbix 文件是 "application/stream-octet",但在我更改它后,我的文件已正确导入。