curl — Как прикрепить файлы к странице Atlassian Confluence с помощью переполнения стека

Я работаю над присоединением файлов через PHP к слиянию (версия 5.9.10)

Вот мой код

$ch=curl_init();
$headers = array(
'X-Atlassian-Token: no-check'
);
$data = array('file' => '@test.txt');
curl_setopt_array(
$ch,
array(
CURLOPT_URL=>'https://<path_to_confluence>/rest/api/content/<page_id>/child/attachment',
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=>C_USERNAME.":".C_PASSWORD
)
);
$result=curl_exec($ch);
$ch_error = curl_error($ch);
if ($ch_error) {
echo "cURL Error: $ch_error";
} else {
var_dump($result);
}
curl_close($ch);

Но после запуска скрипта у меня следующая ошибка:
>

HTTP / 1.1 500 Внутренняя ошибка сервера
Сервер: nginx / 1.5.12
Дата: четверг, 03 ноября 2016 г. 10:12:44 GMT
Тип контента: приложение / JSON
Передача-кодировка: чанки
Подключение: keep-alive
X-ASEN: SEN-2160053
Cookie-набор: JSESSIONID = EE3116DFC552C7D4571608BFCF410559; Path = /; HttpOnly
X-Seraph-LoginПричина: ОК
X-AUSERNAME: пользователь
Cache-Control: без кеша, обязательна повторная проверка
Истекает: четверг, 01 января 1970 года, 00:00:00 по Гринвичу
X-Content-Type-Options: nosniff
Ошибка HTTP до окончания отправки, остановка отправки
Закрытие соединения 0
строка (93) «statusCode»: 500, «message»: «java.lang.IllegalArgumentException: имя файла не должно быть нулевым»

Что я делаю не так? Что я пропустил?

0

Решение

Попробуй это:

$data = array('file' => '@' . realpath('test.txt'));
...
CURLOPT_POSTFIELDS=>$data

Если имя файла требуется, вы можете попробовать это вместо:

$data = array('file' => '@' . realpath('test.txt') . ';filename=test.txt'));
...
CURLOPT_POSTFIELDS=>$data
0

Другие решения

Я столкнулся с этой ошибкой, когда использовал lib cURL и делал это по-старому, например:

CURLOPT_POSTFIELDS => [
'file' => '@/pathToFile'

]

Но так как он устарел по сравнению с PHP 5.5, вам нужно использовать его по-новому:

Императивный путь:

CURLOPT_POSTFIELDS => [
'file' => curl_file_create($filePath)

]

Путь объекта:

CURLOPT_POSTFIELDS => [
'file' => new CurlFile($filePath)

]

0