2016-07-14 47 views
1

Wir verwenden HP Quality Center und wir aktualisieren 11.5x auf 12.21 und ich benutze die API, um ein Ticket zu erstellen. Connexion und Ticket-Erstellung sind in Ordnung, aber Dateianhang nicht.QC REST API: Nicht unterstützter Medientyp

Ich habe {"Id":"qccore.general-error","Title":"Unsupported Media Type","ExceptionProperties":null,"StackTrace":null}

Hier mein Code

$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); 

ist, wenn ich die andere multipart/form-data verwenden Ich habe {"Id":"qccore.general-error","Title":"Illegal multi-part arguments. Attachment wasn't created.","ExceptionProperties":null,"StackTrace":null}

So habe ich eine mehrteilige Struktur Fehler oder einen schlechten Kopf für Inhaltstyp, aber alle, die wir testen, schlägt fehl.

Wir versuchen, Anlage durch Oktettstream-Methode zu setzen, aber den Medientypfehler erhalten.

Danke für Ihre Hilfe,

Antwort

0

Wir haben einen etwas anderen Endpunkt verwenden. Mir ist aufgefallen, dass, obwohl viele "alte" Endpunkte in HP ALM 12.x noch funktionieren, einige von ihnen ihr Verhalten stark geändert haben und die meisten von ihnen Ersatz haben, die stattdessen verwendet werden sollten.

Wir verwenden /rest/domains/DOMAIN/projects/PROJECT/defects/4711/attachments (statt /api/... und Entity-ID über Formularfelder vorbei).

Dann fügen wir einen HTTP-Header Slug: myfilename.txt

Unsere anderen HTTP-Header sind:

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

Nun, wir geben nur das Dateidaten zu diesem Endpunkt. Das funktioniert gut mit HP ALM 12.50.

Siehe auch http://stevenckwong.com/wp/2016/05/09/how-to-upload-an-attachment-to-a-test-in-alm-via-the-rest-api/ für ein ähnliches Beispiel (auch Java-Code, sorry).