2016-07-14 12 views
1

Мы используем Центр качества HP и обновляем 11.5x до 12.21, и я использую API для создания билета. Создание Connexion и ticket в порядке, но прикрепления файла нет.QC REST API: неподдерживаемый тип носителя

Я получил {"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); 

Если я использую другую многослойную/форм-данных я получил {"Id":"qccore.general-error","Title":"Illegal multi-part arguments. Attachment wasn't created.","ExceptionProperties":null,"StackTrace":null}

Так я есть многослойную структуру ошибки или плохой заголовок для типа контента, но все, что мы тестируем, терпит неудачу.

Мы пытаемся установить привязку по методу потока октетов, но получили ошибку типа носителя.

Спасибо за вашу помощь,

ответ

0

Мы используем несколько иную конечную точку. Я заметил, что, хотя многие «старые» конечные точки все еще работают в HP ALM 12.x, некоторые из них сильно изменили свое поведение, и большинство из них имеют замены, которые следует использовать вместо этого.

Мы используем /rest/domains/DOMAIN/projects/PROJECT/defects/4711/attachments (вместо /api/... и передавая идентификатор объекта с помощью полей формы).

Затем мы добавим заголовок HTTP Slug: myfilename.txt

Наши заголовки HTTP являются:

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

Теперь мы только POST данные файла в этой конечной точке. Это отлично работает с 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, извините).