Azure 使用php(多部分表单数据post)将.pbix(power BI)文件导入工作区

Azure 使用php(多部分表单数据post)将.pbix(power BI)文件导入工作区,azure,multipartform-data,powerbi,php-curl,powerbi-embedded,Azure,Multipartform Data,Powerbi,Php Curl,Powerbi Embedded,我想将本地pbix fle导入azure power bi帐户中创建的工作区。我已经使用RESTAPI创建了workspaceId。然而,当我尝试导入pbix文件时,它给出了200个ok状态,而不是202个Id为的已接受响应 这是我遵循的参考代码 职位 授权:AppKey MpaUgrTv5e。。。内容类型:多部分/表单数据; boundary=“A300testx” --A300testx内容处置:表单数据 {.pbix文件的内容(二进制)} --A300testx-- 我使用php curl

我想将本地pbix fle导入azure power bi帐户中创建的工作区。我已经使用RESTAPI创建了workspaceId。然而,当我尝试导入pbix文件时,它给出了200个ok状态,而不是202个Id为的已接受响应

这是我遵循的参考代码

职位 授权:AppKey MpaUgrTv5e。。。内容类型:多部分/表单数据; boundary=“A300testx”

--A300testx内容处置:表单数据

{.pbix文件的内容(二进制)} --A300testx--

我使用php curl请求调用Rest API,下面显示了我尝试的代码

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.powerbi.com/v1.0/collections/XXXXXX/workspaces/XXX-XXX-XXX-XXXXXXXX/imports?datasetDisplayName=mydataset01');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$postData = array(
        'datafile' => '@C:\Users\Desktop\report1.pbix',
);

curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt ( $ch, CURLOPT_HTTPHEADER, array (
        "Authorization: AppKey R97v4Fe5=="
) );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false );
echo $response = curl_exec($ch);

curl_close ( $ch );
作为回应,我得到的状态代码是200 ok with json

{“id”:“0331a80d-6f23-4626-9624-1f6b98ce373a”}


但是,此新数据集不是在workspaceID中创建的。请帮我在这里找到问题。

这是使用php curl发布多部分表单数据的答案,这段代码适合我

$name = 'report1';
$file = 'report1.pbix';
$boundary = "----------BOUNDARY";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.powerbi.com/v1.0/collections/XXXXXX/workspaces/XXX-XXX-XXX-XXXXXXXX/imports?datasetDisplayName=mydataset01');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$postdata .= "--" . $boundary . "\r\n";
$postdata .= "Content-Disposition: form-data; name=\"" . $name . "\"; filename=\"" . $file . "\"\r\n";
$postdata .= "Content-Type: application/octet-stream\r\n\r\n";
$postdata .= file_get_contents($file);
$postdata .= "\r\n";
$postdata .= "--" . $boundary . "--\r\n";

curl_setopt($ch, CURLOPT_POSTFIELDS, $$postdata);
curl_setopt ( $ch, CURLOPT_HTTPHEADER, array (
        "Authorization: AppKey R97v4Fe5==",
        'Content-Type: multipart/form-data; boundary='.$boundary,
        'Content-Length: ' . strlen($postdata)
) );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false );
echo $response = curl_exec($ch);

curl_close ( $ch );

下面是使用php curl的多部分表单数据post的答案,这段代码适合我

$name = 'report1';
$file = 'report1.pbix';
$boundary = "----------BOUNDARY";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.powerbi.com/v1.0/collections/XXXXXX/workspaces/XXX-XXX-XXX-XXXXXXXX/imports?datasetDisplayName=mydataset01');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$postdata .= "--" . $boundary . "\r\n";
$postdata .= "Content-Disposition: form-data; name=\"" . $name . "\"; filename=\"" . $file . "\"\r\n";
$postdata .= "Content-Type: application/octet-stream\r\n\r\n";
$postdata .= file_get_contents($file);
$postdata .= "\r\n";
$postdata .= "--" . $boundary . "--\r\n";

curl_setopt($ch, CURLOPT_POSTFIELDS, $$postdata);
curl_setopt ( $ch, CURLOPT_HTTPHEADER, array (
        "Authorization: AppKey R97v4Fe5==",
        'Content-Type: multipart/form-data; boundary='.$boundary,
        'Content-Length: ' . strlen($postdata)
) );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false );
echo $response = curl_exec($ch);

curl_close ( $ch );

下面是给定解决方案的现成版本

public function import($access_key, $workspace_collection_name, $workspace_id, $file_path, $file_name, $display_name, $nameConflict = 'Overwrite')
{

    $boundary = "----------BOUNDARY";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://api.powerbi.com/v1.0/collections/$workspace_collection_name/workspaces/$workspace_id/imports?datasetDisplayName=$display_name&nameConflict=$nameConflict");
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $postdata = '';
    $postdata .= "--" . $boundary . "\r\n";
    $postdata .= "Content-Disposition: form-data; name=\"" . $file_name . "\"; filename=\"" . $file_path . "\"\r\n";
    $postdata .= "Content-Type: application/octet-stream\r\n\r\n";
    $postdata .= file_get_contents($file_path);
    $postdata .= "\r\n";
    $postdata .= "--" . $boundary . "--\r\n";

    curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        "Authorization: AppKey " . $access_key,
        'Content-Type: multipart/form-data; boundary=' . $boundary,
        'Content-Length: ' . strlen($postdata)
    ));
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $response = curl_exec($ch);
    if (curl_error($ch)) {
        return 'curl error';
    }
    curl_close($ch);

    return $response;

}

下面是给定解决方案的现成版本

public function import($access_key, $workspace_collection_name, $workspace_id, $file_path, $file_name, $display_name, $nameConflict = 'Overwrite')
{

    $boundary = "----------BOUNDARY";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://api.powerbi.com/v1.0/collections/$workspace_collection_name/workspaces/$workspace_id/imports?datasetDisplayName=$display_name&nameConflict=$nameConflict");
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $postdata = '';
    $postdata .= "--" . $boundary . "\r\n";
    $postdata .= "Content-Disposition: form-data; name=\"" . $file_name . "\"; filename=\"" . $file_path . "\"\r\n";
    $postdata .= "Content-Type: application/octet-stream\r\n\r\n";
    $postdata .= file_get_contents($file_path);
    $postdata .= "\r\n";
    $postdata .= "--" . $boundary . "--\r\n";

    curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        "Authorization: AppKey " . $access_key,
        'Content-Type: multipart/form-data; boundary=' . $boundary,
        'Content-Length: ' . strlen($postdata)
    ));
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $response = curl_exec($ch);
    if (curl_error($ch)) {
        return 'curl error';
    }
    curl_close($ch);

    return $response;

}