【问题标题】:Jira attach file to issue with PHP and CURLJira 附加文件以使用 PHP 和 CURL 发出问题
【发布时间】:2017-06-06 13:45:18
【问题描述】:

我找到了几个关于如何在 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 中创建问题,只是似乎无法上传 attahcments...

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

string(0) "" 

不用说也没有上传附件。任何想法我做错了什么?

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

  1. 同时尝试 nocheck 和 no-check
  2. 同时尝试@testing.txt 和 testing.txt
  3. 删除“内容类型:多部分/表单数据”
  4. 完整路径如下:$data = array('file'=>"@C:\xampp\htdocs\Website\testing.txt ,'filename'=>'testing.txt');
  5. 由于已知的 curl 错误,也尝试过这样的操作:$data = array('file'=>"@C:\xampp\htdocs\Website\testing.txt" ';filename=testing.txt');

以及上述所有组合。无论我尝试什么,它都不起作用。还确保我是 Jira 的管理员级别用户。我觉得我的代码应该可以工作……但显然不行。

【问题讨论】:

  • 您可以尝试将file 重命名为file_contents$data = array('file_contents' => "testing.txt"); 吗?
  • @grundic 完成。输出更改为:string(2) "[]" 仍然没有上传文件。
  • Here is 是标准 cUrl 的一个例子,但到目前为止我还没有发现任何区别.. 啊,multipart/form-data 不在 Atlassian 的例子中。
  • @grundic 也尝试过:$headers = array( 'X-Atlassian-Token: no-check' ); 没有运气。我找到了标准 curl 示例以及许多其他 php 示例:community.atlassian.com/t5/Answers-Developer-Questions/… 但是我无法让我的工作。上周左右已经环顾四周了。

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


【解决方案1】:

我最初的假设是错误的:它对 no-checknocheck 都有效——没关系。

您无需将文件名作为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);
?>

【讨论】:

  • 没有区别。 no-check 和 nocheck 都不做任何事情。之前都试过了。
  • 肯定是no-check。那可能是别的东西。
  • 感谢您帮助我。这对我来说真的很痛苦。已经尝试将 @ 符号放在 testing.txt 的前面,用于 no-check 和 nocheck 。只是因为我没有在我的帖子中提到这一点。
  • @Lain,请查看已编辑的帖子,我可以使用这种方法附加文件。
  • 我的 testing.txt 是不是在错误的地方?当我运行它时,它给了我: cURL Error: could't open file "testing.txt" 。 testing.txt 与此 php 文件位于同一目录中,但对我来说似乎很奇怪,它无法打开它。有什么想法吗?
猜你喜欢
  • 2017-10-09
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 1970-01-01
  • 2013-07-09
  • 1970-01-01
  • 2010-11-11
相关资源
最近更新 更多