QC REST API:不支持的媒体类型

时间:2016-07-14 08:56:24

标签: api rest attachment multipart hp-quality-center

我们使用惠普质量中心,我们将11.5倍升级到12.21,并使用API​​创建票证。 Connexion和票证创建都可以,但文件的附件不是。

我得到了{"Id":"qccore.general-error","Title":"Unsupported Media Type","ExceptionProperties":null,"StackTrace":null}

这是我的代码

$filename = $file->name;
$eol = "\r\n";
$mime_boundary = 'boundary';

$content = '--' . $mime_boundary . $eol;
$content .= 'Content-Disposition: form-data; name="entity.type"';
$content .= $eol . $eol;
$content .= 'defect';
$content .= $eol;

$content = '--' . $mime_boundary . $eol;
$content .= 'Content-Disposition: form-data; name="entity.id"';
$content .= $eol . $eol;
$content .= $id;
$content .= $eol;

$content = '--' . $mime_boundary . $eol;
$content .= 'Content-Disposition: form-data; name="filename"';
$content .= $eol . $eol;
$content .= utf8_encode($filename);
$content .= $eol;

$content .= '--' . $mime_boundary . $eol;
$content .= 'Content-Disposition: form-data; name="file"; filename="' . utf8_encode($filename) . '"';
$content .= $eol;
$content .= 'Content-Type: ' . $file['type'];
$content .= $eol . $eol;

$dt = explode('-', $file->create_dt);
$path_file = $config['files']['forms_attachments_path'] . DIRECTORY_SEPARATOR . $dt[0] . DIRECTORY_SEPARATOR . $dt[1] . DIRECTORY_SEPARATOR . $file->filename;
$handle = fopen($path_file, 'r');
$content .= fread($handle,filesize($path_file));
fclose($handle);

$content .= $eol;
$content .= '--' . $mime_boundary . '--';

$header = array(
    'Content-Type: multipart/mixed; boundary='.$mime_boundary,
    'Content-Length: '.strlen($content),
    'Accept: application/json'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
curl_setopt($ch, CURLOPT_COOKIE, $cookiess);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_PROXY, null);
curl_setopt($ch, CURLOPT_URL, $config['qc']['url'] . '/api/domains/' . $config['qc']['domain']. '/projects/' . $config['qc']['project'] . '/attachments/');

$output = curl_exec($ch);
curl_close($ch);
var_dump($output);

如果我使用其他multipart / form-data我得到了{"Id":"qccore.general-error","Title":"Illegal multi-part arguments. Attachment wasn't created.","ExceptionProperties":null,"StackTrace":null}

所以我有一个多部分结构错误或内容类型的错误标题,但我们测试的所有内容都失败了。

我们尝试通过八位字节流方法放置附件但是得到了媒体类型错误。

感谢您的帮助,

1 个答案:

答案 0 :(得分:0)

我们使用稍微不同的端点。我注意到,虽然许多“旧”端点仍然可以在HP ALM 12.x中运行,但是其中一些端点会改变它们的行为,并且大多数端点都有替换,应该使用它们。

我们使用 /rest/domains/DOMAIN/projects/PROJECT/defects/4711/attachments (而不是/api/...并通过表单字段传递实体ID)。

然后,我们添加HTTP标头Slug: myfilename.txt

我们的其他HTTP标头是:

Accept: application/xml
Content-Type: application/octet-stream

现在,我们只将文件数据发布到该端点。这适用于HP ALM 12.50。

另请参阅http://stevenckwong.com/wp/2016/05/09/how-to-upload-an-attachment-to-a-test-in-alm-via-the-rest-api/了解类似示例(也是Java代码,抱歉)。