Хобрук: Ваш путь к мастерству в программировании

Проблема при загрузке изображения в tumblr с помощью php/curl

Я пытался создать простой файл php, который будет загружать одно изображение в tumblr. Пример приведен здесь, но он просто не работает с изображениями. Вот код:

<?php
// Authorization info
$tumblr_email    = '[email protected]';
$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";
}

?> 

Я не очень хорошо знаком с php/curl, поэтому понятия не имею, что делаю не так. Это также написано на tumblr.com:

Загрузка файлов может быть выполнена в параметре данных, указанном выше. Вы можете использовать любой из распространенных методов кодирования:

1) метод multipart/form-data, например окно загрузки файла в веб-форме. Максимальный размер:

...10 МБ для фотографий...

Это рекомендуется, так как накладные расходы намного меньше.

2) Обычный метод POST, при котором все двоичное содержимое файла кодируется URL-адресом, как и любая другая переменная POST. Максимальный размер:

...5 МБ для фотографий...

Спасибо.


  • Определить Не работает. Что случается? Кроме того, превышают ли ваши изображения ограничение в 5/10 МБ? 04.10.2010
  • Tumblr отправляет это сообщение: Ошибка при загрузке фотографии. 04.10.2010
  • О, и образец изображения намного меньше 5 МБ. Но самое смешное, что скрипт работает, когда я передаю ему то же самое изображение, расположенное на удаленном сервере (http://...). 04.10.2010

Ответы:


1

Попробуй это:

// Authorization info
$tumblr_email    = '[email protected]';
$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);

Вам нужно передать массив в CURLOPT_POSTFIELDS и добавить абсолютный путь к файлу с @. Это заставит cURL публиковать данные как multipart/form-data.

05.10.2010
Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..