Jira附加文件以发布PHP和CURL

时间:2017-06-06 13:45:18

标签: php curl jira jira-rest-java-api

我找到了几个关于如何在jira中上传附件到问题的例子,但是我无法使它们中的任何一个工作。我在Jira社区帮助论坛上发布了这个问题,但已经过了一个星期,有0个回复,所以希望这里的社区可以提供帮助。

这是我目前的尝试:

 $Jirausername = 'myUsername';
    $Jirapassword = 'myPassword';

    $ch=curl_init();
$headers = array(
    'X-Atlassian-Token: nocheck',
    'Content-Type: multipart/form-data'
);
$data = array('file' => "testing.txt");


curl_setopt_array(
    $ch,
    array(
        CURLOPT_URL=>'https://myCompany.net/rest/api/latest/issue/TAG-78/attachments',
        CURLOPT_POST=>true,
        CURLOPT_VERBOSE=>1,
        CURLOPT_POSTFIELDS=>$data,
        CURLOPT_SSL_VERIFYHOST=> 0,
        CURLOPT_SSL_VERIFYPEER=> 0,
        CURLOPT_RETURNTRANSFER=>true,
        CURLOPT_HEADER=>false,
        CURLOPT_HTTPHEADER=> $headers,
        CURLOPT_USERPWD=>"$Jirausername:$Jirapassword"
    )
);
$result=curl_exec($ch);
$ch_error = curl_error($ch);
if ($ch_error) {
    echo "cURL Error: $ch_error";
} else {
    var_dump($result);
}
curl_close($ch);

testing.txt与此文件位于同一目录中。我已经在托管的网络服务器上安装了curl,可以在jira中创建问题,但似乎无法上传文件...

当我运行此页面时,它会显示:

string(0) "" 

无需上传任何附件也不用说。我有什么想法吗?

编辑:添加赏金,以下是我尝试的一些事情:

  1. 尝试nocheck和no-check
  2. 同时尝试@ testing.txt和testing.txt
  3. 删除'内容类型:multipart / form-data'
  4. 完整路径:$data = array('file'=>"@C:\xampp\htdocs\Website\testing.txt ,'filename'=>'testing.txt');
  5. 由于已知的卷曲错误,我也是这样尝试的:$data = array('file'=>"@C:\xampp\htdocs\Website\testing.txt" ';filename=testing.txt');
  6. 以上各项的组合。无论我尝试什么,它都不起作用。还确保我是Jira的管理员级用户。我觉得我的代码应该有用......但显然不行。

1 个答案:

答案 0 :(得分:0)

我最初的假设是错误的:它适用于 no-check nocheck - 这没关系。

不是将文件名作为file的参数,而是先创建一个像这样的curl文件对象:

$cfile = curl_file_create('testing.txt');

然后把它放到数组中:

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

这是完整的解决方案,对我有用:

<?php
 $Jirausername = '<username>';
 $Jirapassword = '<password>';

$ch=curl_init();
$headers = array(
    'X-Atlassian-Token: nocheck',
    'Content-Type: multipart/form-data'
);


$cfile = curl_file_create('testing.txt');
$data = array('file' => $cfile);


curl_setopt_array(
    $ch,
    array(
        CURLOPT_URL=>'https://<JIRA-SERVER>/rest/api/latest/issue/<ISSUE-KEY>/attachments',
        CURLOPT_POST=>true,
        CURLOPT_VERBOSE=>1,
        CURLOPT_POSTFIELDS=>$data,
        CURLOPT_INFILESIZE => 5,
        CURLOPT_SSL_VERIFYHOST=> 0,
        CURLOPT_SSL_VERIFYPEER=> 0,
        CURLOPT_RETURNTRANSFER=>true,
        CURLOPT_HEADER=>true,
        CURLOPT_HTTPHEADER=> $headers,
        CURLOPT_USERPWD=>"$Jirausername:$Jirapassword"
    )
);
$result=curl_exec($ch);
$ch_error = curl_error($ch);
if ($ch_error) {
    echo "cURL Error: $ch_error";
} else {
    var_dump($result);
}
curl_close($ch);
?>