LibCURL sendet Dateinamen anstelle von Dateiinhalten, wenn ich versuche, eine Binärdatei in Windows Server 2008 hochzuladen

8

Ich bekomme dieses seltsame Verhalten mit libCURL. Wenn ich versuche, eine Datei hochzuladen, indem ich "@" an den Anfang des Dateinamens anfüge (wie in der man-Seite von libCURL dokumentiert), sendet libCURL anstelle des hochzuladenden Dateiinhalts den Dateinamen selbst (mit dem @ am Anfang).

Dies wird unter Windows 2008 R2 mit xampp Version 5.6.8 ausgeführt, in dem curl kompiliert wurde (curl-Version 7.40.0).

Hier ist releant Code-Fragment:

%Vor%

Dieser Code funktioniert unter Linux, aber nicht unter Windows Server 2008.

Hier sind die Formulardaten, die ich bekomme:

%Vor%

Wie Sie sehen können, erhalte ich @C:\image.png anstelle von Inhalten.

Weiß jemand, warum libCURL den Dateiinhalt nicht hochladen würde?

    
bodacydo 30.07.2015, 19:42
quelle

1 Antwort

5

Aus der Dokumentation von curl-setopt

  

CURLOPT_POSTFIELDS Die vollständigen Daten, die in einer HTTP- "POST" -Operation gepostet werden sollen.   Um eine Datei zu veröffentlichen, fügen Sie einen Dateinamen mit @ voran und verwenden Sie den vollständigen Pfad. Das   Dateityp kann explizit angegeben werden, indem Sie dem Dateinamen mit folgen   der Typ im Format '; type = mimetype'. Dieser Parameter kann entweder sein   übergeben als eine urlencodierte Zeichenfolge wie 'para1 = val1 & amp; para2 = val2 & amp; ...' oder als   ein Array mit dem Feldnamen als Schlüssel und Felddaten als Wert. Wenn Wert   ist ein Array, der Content-Type-Header wird auf gesetzt   Multipart / Formulardaten. Ab PHP 5.2.0 muss der Wert ein Array für Dateien sein   Diese Option wird mit dem Präfix @ übergeben. Ab PHP 5.5.0 ist das @   Präfix ist veraltet und Dateien können mit CURLFile gesendet werden. Das @   Präfix kann zur sicheren Weitergabe von Werten, die mit @ beginnen, deaktiviert werden   Setzen Sie die Option CURLOPT_SAFE_UPLOAD auf TRUE.

Das Verhalten hängt von der php-Version ab und das @ -Präfix ist jetzt veraltet.

Sie sollten die CurlFile-Klasse verwenden, um die CURLOPT_POSTFIELDS der curl-Anfrage wie folgt zu setzen:

%Vor%     
mpromonet 02.08.2015 16:50
quelle

Tags und Links