Jira 附加文件以使用 PHP 和 CURL 发布
Jira attach file to issue with PHP and CURL
我找到了几个关于如何在 jira 中上传附件到问题的示例,但是我无法使它们中的任何一个工作。我在 Jira 社区帮助论坛上发布了这个问题,但已经有一个多星期没有回复,所以希望这里的社区可以提供帮助。
这是我目前的尝试:
$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) ""
没有附件就更不用说了。知道我做错了什么吗?
编辑:添加赏金,这是我尝试过的一些事情:
- 同时尝试 nocheck 和 no-check
- 同时尝试@testing.txt 和 testing.txt
- 删除'Content-Type: multipart/form-data'
- 完整路径如下:
$data = array('file'=>"@C:\xampp\htdocs\Website\testing.txt ,'filename'=>'testing.txt');
- 由于已知的卷曲错误,也尝试过这样:
$data = array('file'=>"@C:\xampp\htdocs\Website\testing.txt" ';filename=testing.txt');
以及上述各项的所有组合。无论我尝试什么,它都不起作用。还确保我是 Jira 的管理员级别用户。我觉得我的代码应该可以工作...但显然不行。
我最初的假设是错误的:它适用于 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);
?>
我找到了几个关于如何在 jira 中上传附件到问题的示例,但是我无法使它们中的任何一个工作。我在 Jira 社区帮助论坛上发布了这个问题,但已经有一个多星期没有回复,所以希望这里的社区可以提供帮助。
这是我目前的尝试:
$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) ""
没有附件就更不用说了。知道我做错了什么吗?
编辑:添加赏金,这是我尝试过的一些事情:
- 同时尝试 nocheck 和 no-check
- 同时尝试@testing.txt 和 testing.txt
- 删除'Content-Type: multipart/form-data'
- 完整路径如下:
$data = array('file'=>"@C:\xampp\htdocs\Website\testing.txt ,'filename'=>'testing.txt');
- 由于已知的卷曲错误,也尝试过这样:
$data = array('file'=>"@C:\xampp\htdocs\Website\testing.txt" ';filename=testing.txt');
以及上述各项的所有组合。无论我尝试什么,它都不起作用。还确保我是 Jira 的管理员级别用户。我觉得我的代码应该可以工作...但显然不行。
我最初的假设是错误的:它适用于 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);
?>