supercat1510
Erfahrenes Mitglied
Ich versuche gerade eine ZIP-Datei auf einen externen Server zu verfrachten.
Soweit funktioniert das ganze schon recht gut, nur das die Zip die auf dem Server ankommt leer ist.
Ich vermute es ist nur eine Kleinigkeit, aber ich sitz schon ewig dran und finde den Fehler nicht.
Hier mein bisheriger Code.
Hier noch kurze Info zur Upload api
Die Upload-API ist ein HTTPS-Endpunkt, um Ihre Upload-Datei komplett automatisiert hochzuladen. Senden Sie dazu einen POST-Request an https://xxx.de/upload-api/upload/{file-name}.
Die Zugangsdaten sind die gleichen, wie für den FTP-Server in der Vergangenheit. Verwenden Sie bitte HTTP Basic Authentification, um den Benutzernamen und das Passwort zu übertragen.
Grundsätzlich ist in der Regel nur der Programmteil zu ändern, der für die Übertragung verantwortlich ist. Ein Beispielcode finden Sie am Ende dieses Textblocks.
Die Upload-Datei muss als HTTP-Payload und in Binärformat gesendet werden, Multipart und Encoding werden nicht unterstützt.
Ersetzen Sie {file-name} mit dem Namen, den die Datei auf dem Server haben soll. Hierbei gelten die selben Benamungsregeln, wie in der Vergangenheit auf dem FTP-Server (der Dateityp wird über die Dateiendung erkannt, z.B. .zip, .csv oder .xml). Obwohl es bei der Upload-API keine Schwierigkeiten mehr mit dem Überschreiben von Dateien gibt, ist es empfehlenswert etwas Eindeutiges als Bestandteil des Dateinamens zu verwenden (z.B. einen Zeitstempel), um die Nachverfolgung in Logdateien zu vereinfachen. Die dazugehörige Report-Email kann dadurch ebenfalls leichter zugeordnet werden, da die Email den Dateinamen als Email-Header (X-xxx-UploadedFileName) enthält. Der Dateiname darf folgende Zeichen beinhalten: 'a'-'z', 'A'-'Z', '0'-'9', '.', '_' und '-'.
cURL Beispiel
curl -v -u fooUser:barPw -X POST --data-binary @helau.zip https://xxx.de/upload-api/upload/foobar-2016-02-09_11-11-11.zip
Request
Resourcen-Pfad Methode Content-Type / Accept header
https://xxxx.de/upload-api/upload/{file-name} POST Wird nicht benötigt.
Beispiel Request-Zeile und HTTP-Header
POST /upload-api/upload/foobar-2016-02-09_11-11-11.zip HTTP/1.0
Host: xxxx.de
Authorization: QWxhZGluOnNlc2FtIG9wZW4=
(ab hier Binärdaten...)
Response
Response-Status Erklärung
201 (created) Erfolgreich hochgeladen.
400 (bad request) Etwas stimmt nicht mit dem Dateinamen.
Soweit funktioniert das ganze schon recht gut, nur das die Zip die auf dem Server ankommt leer ist.
Ich vermute es ist nur eine Kleinigkeit, aber ich sitz schon ewig dran und finde den Fehler nicht.
Hier mein bisheriger Code.
PHP:
$cfile = curl_file_create($config->UPLOAD_PATH.'/bestand.zip','application/zip',$neuerdateiname); // try adding
$filedata = array('file' => $cfile);
curl_setopt($ch, CURLOPT_URL, $config->API_SERVER.$neuerdateiname); //Set the Url
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //Get the response from cURL
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_USERPWD, $config->USER.':'.$config->PASS); // Username Password
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/zip']); // -H
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); // -0
curl_setopt($ch, CURLOPT_POSTFIELDS, $filedata); //Create a POST array with the file in it
// Execute the request
$response = curl_exec($ch);
if($errno = curl_errno(ch)) {
$error_message = curl_strerror($errno);
echo "cURL error ({$errno}):\n {$error_message}";
}
if(!curl_errno($ch))
{
$info = curl_getinfo($ch);
if($info['http_code'] == 201){
echo '<p style="color:#00ff00">Status 201: Erfolgreich hochgeladen</p>';
}
if($info['http_code'] == 400){
echo '<p style="color:#ff0000;">Status 400: Etwas stimmt nicht mit dem Dateinamen.</p>';
}
echo '<p>Es wurden ' . $info['total_time'] . ' Sekunden benötigt für einen Request an ' . $info['url'].'</p>';
}
curl_close ($ch);
Hier noch kurze Info zur Upload api
Die Upload-API ist ein HTTPS-Endpunkt, um Ihre Upload-Datei komplett automatisiert hochzuladen. Senden Sie dazu einen POST-Request an https://xxx.de/upload-api/upload/{file-name}.
Die Zugangsdaten sind die gleichen, wie für den FTP-Server in der Vergangenheit. Verwenden Sie bitte HTTP Basic Authentification, um den Benutzernamen und das Passwort zu übertragen.
Grundsätzlich ist in der Regel nur der Programmteil zu ändern, der für die Übertragung verantwortlich ist. Ein Beispielcode finden Sie am Ende dieses Textblocks.
Die Upload-Datei muss als HTTP-Payload und in Binärformat gesendet werden, Multipart und Encoding werden nicht unterstützt.
Ersetzen Sie {file-name} mit dem Namen, den die Datei auf dem Server haben soll. Hierbei gelten die selben Benamungsregeln, wie in der Vergangenheit auf dem FTP-Server (der Dateityp wird über die Dateiendung erkannt, z.B. .zip, .csv oder .xml). Obwohl es bei der Upload-API keine Schwierigkeiten mehr mit dem Überschreiben von Dateien gibt, ist es empfehlenswert etwas Eindeutiges als Bestandteil des Dateinamens zu verwenden (z.B. einen Zeitstempel), um die Nachverfolgung in Logdateien zu vereinfachen. Die dazugehörige Report-Email kann dadurch ebenfalls leichter zugeordnet werden, da die Email den Dateinamen als Email-Header (X-xxx-UploadedFileName) enthält. Der Dateiname darf folgende Zeichen beinhalten: 'a'-'z', 'A'-'Z', '0'-'9', '.', '_' und '-'.
cURL Beispiel
curl -v -u fooUser:barPw -X POST --data-binary @helau.zip https://xxx.de/upload-api/upload/foobar-2016-02-09_11-11-11.zip
Request
Resourcen-Pfad Methode Content-Type / Accept header
https://xxxx.de/upload-api/upload/{file-name} POST Wird nicht benötigt.
Beispiel Request-Zeile und HTTP-Header
POST /upload-api/upload/foobar-2016-02-09_11-11-11.zip HTTP/1.0
Host: xxxx.de
Authorization: QWxhZGluOnNlc2FtIG9wZW4=
(ab hier Binärdaten...)
Response
Response-Status Erklärung
201 (created) Erfolgreich hochgeladen.
400 (bad request) Etwas stimmt nicht mit dem Dateinamen.
Zuletzt bearbeitet: