Я строю скрипт на 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);
С этим кодом я просто пытаюсь загрузить тестовый файл, который уже находится на сервере. Что мне нужно изменить, чтобы завершить успешную загрузку файла?
Добавьте одно или несколько вложений к проблеме.
Этот ресурс ожидает многочастного поста. Тип мультимедийных данных multipart / form-data определен в RFC 1867. В большинстве клиентских библиотек есть классы, упрощающие работу с составными публикациями. Например, в Java библиотека HTTP-компонентов Apache предоставляет MultiPartEntity, который упрощает отправку составного POST.
Для защиты от атак XSRF, поскольку этот метод принимает данные multipart / form, он имеет защиту 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 «[email protected]» … / rest / api / 2 / issue / TEST-123 / attachments
поэтому передаваемые данные должны содержать имя поля file [email protected]. сам пример выше
Других решений пока нет …