使用 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",但在我更改它后,我的文件已正确导入。
所以我使用 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",但在我更改它后,我的文件已正确导入。