使用Jira REST API的文件附件返回空数组

时间:2014-11-10 20:39:49

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

我正在用PHP构建一个脚本,它将把文件附加到现有的Jira问题上。运行脚本时,返回的所有内容都是空数组。我想知道我的代码有什么问题:

$cfile = curl_file_create($_SERVER['DOCUMENT_ROOT'].'/test.png','image/png','test.png');

$data1 = array('test.png' => $cfile);

$url1 = 'http://myserver.com/rest/api/2/issue/TP-55/attachments';
$ch1 = curl_init();
$headers1 = array(
    'Content-Type: multipart/form-data',
    'X-Atlassian-Token: nocheck'
);

curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch1, CURLOPT_VERBOSE, 1);
curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch1, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch1, CURLOPT_HTTPHEADER, $headers1);
curl_setopt($ch1, CURLOPT_CUSTOMREQUEST, "POST");

curl_setopt($ch1, CURLOPT_SAFE_UPLOAD, 1);
curl_setopt($ch1, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($ch1, CURLOPT_POSTFIELDS, $data1);
curl_setopt($ch1, CURLOPT_URL, $url1);

$username = 'myusername';
$password = 'mypassword';
curl_setopt($ch1, CURLOPT_USERPWD, "$username:$password");

$result1 = curl_exec($ch1);
$ch_error1 = curl_error($ch1);


if ($ch_error1) {
    echo "cURL Error: $ch_error1";
} else {
    echo $result1;
}

curl_close($ch1);

使用此代码,我只是尝试上传服务器上已有的测试文件。我需要更改什么才能完成成功的文件上传?

1 个答案:

答案 0 :(得分:1)

为问题添加一个或多个附件。 此资源需要一个多部分帖子。媒体类型的multipart / form-data在RFC 1867中定义。大多数客户端库都有类,使得处理多部分帖子变得简单。例如,在Java中,Apache HTTP Components库提供了一个MultiPartEntity,使得提交多部分POST变得简单。 为了防止XSRF攻击,因为此方法接受multipart / form-data,所以它具有XSRF保护。这意味着您必须提交X-Atlassian-Token标头:nocheck请求,否则将被阻止。 包含附件的multipart / form-data参数的名称必须是" file" 上传名为" myfile.txt"的文件的简单示例发布REST-123: curl -D- -u admin:admin -X POST -H" X-Atlassian-Token:nocheck" -F" file=@myfile.txt" ... /休息/ API / 2 /问题/ TEST-123 /附件

所以您传输的数据必须包含字段名称文件=@test.png。上面的例子