2016-11-03 3 views
0

ich auf Dateien anhängen über PHP gerade arbeite bis zur Konfluenz (Version 5.9.10)Wie Anhängen von Dateien auf Atlassian Confluence-Seite mit PHP

Hier ist mein Code

$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); 

Aber nachdem ich Skript ausgeführt habe nächsten Fehler: >

HTTP/1.1 500 Internal Server Error
Server: nginx/1.5.12
Date: Thu, 03 Nov 2016 10:12:44 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
X-ASEN: SEN-2160053
Set-Cookie: JSESSIONID=EE3116DFC552C7D4571608BFCF410559; Path=/; 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 of send, stop sending
Closing connection 0 string(93) "statusCode":500,"message":"java.lang.IllegalArgumentException:File name must not be null"

Was mache ich falsch? Was habe ich verpasst?

+0

Wenn es eine Möglichkeit gibt, den (qualifizierten, vorzugsweise) Namen der Methode anzugeben, wo diese oc kurs, sogar die (ersten paar Ebenen des) Stack-Trace, bitte tun Sie es. – greybeard

+0

@greybeard, ja, sicher, die Beschreibung der Aufgabe wurde aktualisiert –

+0

Jungs, irgendwelche Updates? –

Antwort

0

Versuchen Sie folgendes:

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

Wenn der Dateiname erforderlich ist, können Sie diese stattdessen versuchen:

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

ich diesen Fehler aufgetreten ist, wenn ich die lib cURL wurde mit und war es, die alte zu tun Art und Weise, wie:

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

]

Aber da es von PHP 5.5 veraltet ist, müssen Sie ihm die neue Art und Weise nutzen:

Imperative Weg:

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

]

Objekt Art und Weise:

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

]