Problem beim Hochladen eines Bildes auf tumblr mit PHP / curl
-
27-09-2019 - |
Frage
Ich habe versucht, eine einfache PHP-Datei zu erstellen, die ein einzelnes Bild hochladen, wird auf tumblr. Ein Beispiel ist aufgeführt hier , aber es wird nicht nur die Arbeit mit Bildern. Hier ist der Code:
<?php
// Authorization info
$tumblr_email = 'lol@something.com';
$tumblr_password = 'secret';
// Data for new record
$post_type = 'photo';
//////////////////////THIS DOESN'T WORK/////////////////////////////////
//$filename = "/Applications/MAMP/htdocs/1.jpeg";
//$handle = fopen($filename, "r");
//$post_data = fread($handle, filesize($filename));
//////////////////////NEITHER DOES THIS/////////////////////////////////
//$post_data = "/Applications/MAMP/htdocs/1.jpg";
///////////////////////////////NOR THIS/////////////////////////////////
//$filename = "/Applications/MAMP/htdocs/1.jpeg";
//$post_data = fopen($filename, "r");
// Prepare POST request
$request_data = http_build_query(
array(
'email' => $tumblr_email,
'password' => $tumblr_password,
'type' => $post_type,
'data' => $post_data,
'generator' => 'testing tumblr API example'
)
);
// Send the POST request (with cURL)
$c = curl_init('http://www.tumblr.com/api/write');
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $request_data);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($c);
$status = curl_getinfo($c, CURLINFO_HTTP_CODE);
curl_close($c);
// Check for success
if ($status == 201) {
echo "Success! The new post ID is $result.\n";
} else if ($status == 403) {
echo 'Bad email or password';
} else {
echo "Error: $result\n";
}
?>
Ich bin nicht so vertraut mit PHP / curl, so dass ich keine Ahnung, was ich falsch tue. Dies wird auch geschrieben auf tumblr.com:
Das Hochladen von Dateien kann in einem Datenparameter durchgeführt werden, in dem oben angegeben. Sie können entweder der gemeinsamen Codierungsverfahren verwenden:
1) multipart / form-data-Methode, wie eine Datei-Upload-Box in einem Web-Formular. Maximale Größe:
... 10 MB für Fotos ...
Dies wird empfohlen, da es viel weniger Overhead.
2) Normal POST-Methode, bei der die gesamte Datei binären Inhalte sind URL-codiert wie jede andere POST-Variable. Maximale Größe:
... 5 MB für Fotos ...
Danke.
Lösung
Versuchen Sie diese:
// Authorization info
$tumblr_email = 'lol@something.com';
$tumblr_password = 'secret';
// Data for new record
$post_type = 'photo';
$post_data = "/Applications/MAMP/htdocs/1.jpg";
$request_data = array(
'email' => $tumblr_email,
'password' => $tumblr_password,
'type' => $post_type,
'data' => '@'.$post_data,
'generator' => 'testing tumblr API example'
);
// Send the POST request (with cURL)
$c = curl_init('http://www.tumblr.com/api/write');
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $request_data);
Sie müssen ein Array CURLOPT_POSTFIELDS passieren, und stellen Sie vor dem absoluten Pfad zur Datei mit einem @. Dadurch wird cURL die Daten als multipart / form-data senden.