JIRA API附件名称包含已发布文件的完整路径

时间:2013-08-26 09:35:04

标签: php api jira attachment

我一直在使用Jira API,并且看到我的请求的结果不一致。有时它会起作用,有时则不起作用。上周我能够很好地发布问题的附件,但现在发生了一个老问题:附件的名称包含发布文件的整个路径,因此附件无法打开。我使用json表示来发布文件:

$array = array("file"=>"@filename");
json_encode($array);
...

这会发布文件,但问题是当它在JIRA中发布文件名时是这样的:

  

/var/www/user/text.text

毋庸置疑,它无法在JIRA中打开。之前我遇到过这个问题,然后它突然消失了,现在再次发生了。我真的不明白。顺便说一下,即使可能在文档中推荐使用curl,我也没有使用curl。

2 个答案:

答案 0 :(得分:1)

我意识到这个问题有些陈旧,但我遇到了类似的问题。似乎Jira并没有像预期的那样修剪文件名。我能用以下方法修复它。如果您使用的是PHP> = 5.5.0:

$url = "http://example.com/jira/rest/api/2/issue/123456/attachments";
$headers = array("X-Atlassian-Token: nocheck");

$attachmentPath = "/full/path/to/file";
$filename = array_pop(explode('/', $attachmentPath));

$cfile = new CURLFile($attachmentPath);
$cfile->setPostFilename($filename);

$data = array('file'=>$cfile);

$ch = curl_init();

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERPWD, "$user:$pass");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

$result = curl_exec($ch);

$ch_error = curl_error($ch);

if ($ch_error){
    echo "cURL Error: $ch_error"; exit();
} else {
    print_r($result);
}

对于PHP< 5.5.0但是> 5.2.10(见this bug):

$data = array('file'=>"@{$attachmentPath};filename={$filename}");

答案 1 :(得分:0)

是的,我在https://jira.atlassian.com/browse/JRA-30765处就此提出了问题 通过REST向JIRA添加附件遗憾的是没那么有用。

有趣的是问题消失了 - 也许你是从另一个地方运行你的脚本?