我正在用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);
使用此代码,我只是尝试上传服务器上已有的测试文件。我需要更改什么才能完成成功的文件上传?
答案 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。上面的例子