0

我正在通过 PHP 将文件附加到 confluence(版本 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
日期:2016 年 11 月 3 日星期四 10:12:44 GMT
内容类型:应用程序/json
传输编码:分块
连接:保持活动
X-ASEN:SEN- 2160053
设置 Cookie:JSESSIONID=EE3116DFC552C7D4571608BFCF410559;路径=/; HttpOnly
X-Seraph-LoginReason: OK
X-AUSERNAME: user
Cache-Control: no-cache, must-revalidate
Expires: Thu, 01 Jan 1970 00:00:00 GMT
X-Content-Type-Options: nosniff
HTTP error before end发送,停止发送
关闭连接 0 字符串(93)“statusCode”:500,“message”:“java.lang.IllegalArgumentException:文件名不能为空”

我做错了什么?我错过了什么?

4

2 回答 2

0

尝试这个:

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

如果需要文件名,你可以试试这个:

$data = array('file' => '@' . realpath('test.txt') . ';filename=test.txt'));
...
CURLOPT_POSTFIELDS=>$data
于 2016-11-08T11:21:16.557 回答
0

我在使用 lib cURL 并以旧方式执行此操作时遇到此错误,例如:

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

]

但由于它已从 PHP 5.5 中弃用,您需要以新的方式使用它:

命令方式:

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

]

对象方式:

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

]

于 2017-06-11T20:52:42.923 回答