2017-06-06 78 views
0

我发现了几个关于如何将附件上载到jira中的问题的例子,但是我还没有能够使它们中的任何一个工作。我在Jira社区帮助论坛上发布了这个问题,但已经过了一个多星期的0回复,希望这里的社区能够提供帮助。Jira附加文件使用PHP和CURL发布

这里是我当前的尝试:

$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是在同一个目录作为该文件。我已经卷曲安装在哪里,这是托管,可以创建JIRA罚款问题的Web服务器,只是不能似乎上传attahcments ...

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

string(0) "" 

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

编辑:添加赏金,这里有一些事情我已经尝试:

  1. 努力都NOCHECK和NOCHECK
  2. 努力都@ testing.txt和testing.txt
  3. 删除“内容型:多部分/格式数据”
  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');

以及上述各项的组合。无论我尝试什么,它都不起作用。也确保我是Jira的管理员级用户。我觉得我的代码应该工作......但显然不是。

+0

你可以尝试将'file'重命名为'file_contents': '$ data = array('file_contents'=>“testing.txt”);'? – grundic

+0

@grundic完成。输出改为:string(2)“[]”仍然没有文件上传。 – Lain

+0

[这里是](https://confluence.atlassian.com/jirakb/how-to-attach-an-attachment-in-a-jira-issue-using-rest-api--699957734.html)标准的一个例子cUrl,但到目前为止我还没有发现任何区别。啊,'multipart/form-data'并不是Atlassian的例子。 – grundic

回答

0

我最初的假设是错误的:它的工作原理与两个NOCHECKNOCHECK - 没关系。

而不是把一个文件名作为参数file,你必须首先创建一个卷曲的文件对象是这样的:

$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); 
?> 
+0

没有区别。无核查和nocheck都无所作为。曾经尝试过。 – Lain

+0

它绝对必须是'no-check'。那可能是另一回事了。 – grundic

+0

谢谢你试图帮助我。这是我身边真正的痛苦。试图将tests.txt的@ sign infront同时用于no-check和nocheck。就在我没有在我的帖子中提到这一点。 – Lain