如何使用PHP将文件附加到Atlassian Confluence页面

时间:2016-11-03 08:27:40

标签: php curl confluence confluence-rest-api

我正在努力通过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);

但是在运行脚本之后我发生了下一个错误:     &GT;

  

HTTP / 1.1 500内部服务器错误
  服务器:nginx / 1.5.12
  日期:2016年11月3日星期四10:12:44 GMT
  内容类型:application / json
  转移编码:分块
  连接:保持活力
  X-ASEN:SEN-2160053
  Set-Cookie:JSESSIONID = EE3116DFC552C7D4571608BFCF410559;路径= /;仅Http
  X-Seraph-LoginReason:好的   X-AUSERNAME:用户
  缓存控制:无缓存,必须重新验证   到期日:1970年1月1日星期四00:00:00 GMT
  X-Content-Type-Options:nosniff
  发送结束前发生HTTP错误,停止发送
  关闭连接0   string(93)“statusCode”:500,“message”:“java.lang.IllegalArgumentException:文件名不能为空”   

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

2 个答案:

答案 0 :(得分:0)

试试这个:

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

如果需要文件名,您可以尝试使用:

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

答案 1 :(得分:0)

我在使用lib cURL时遇到了这个错误,并且是以旧的方式进行的,例如:

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

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

势在必行:

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

对象方式:

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