Загрузите файл на сервер Drupal с внешнего URL-адреса


Я пытаюсь кэшировать на сервере изображения профилей, предоставляемые API Facebook Graph. До сих пор я безуспешно пытался найти путь к изображению, а затем позвонил:

$file = file_save_upload($big_pic_url, array(), $dest, FILE_EXISTS_RENAME);

Это возвращает NULL каждый раз. Я попробовал несколько синтаксисов для пути назначения, а также для пути URL-адреса Pic, похоже, ничего не работает.

Я делаю это правильно? Может ли file_save_upload() использовать внешнюю ссылку в качестве части своего аргумента?

 4
Author: Laxman13, 2011-08-10

2 answers

Вот решение, которое я недавно использовал для модуля Facebook. Установите путь к изображению в переменную $path (т.Е. http://graph.facebook.com/username/picture ). Затем выполните следующие действия, чтобы сохранить его через управляемую файловую систему Drupal:

$image = file_get_contents($path); // this is a PHP function to get a string representation of the image file

$destination = 'public://path/to/store/this/image/name.jpg'; // a stream wrapper path where you want this image to reside on your file system including the desired filename

$file = file_save_data($image, $destination, FILE_EXISTS_REPLACE);

if (is_object($file)) { // if you get back a Drupal $file object, everything went as expected so make the status permenant
   $file->status = 1;
   $file = file_save($file);
}
 5
Author: mattacular, 2012-03-08 01:47:22

Это функция, которую я использую, и она работает.

function get_external_image($url) { 
    $external_image = file_get_contents($url);
    $parsed_url = parse_url($url);
    $name_dest = rand(1000,9999)."_". basename($parsed_url["path"]);
    $file = file_save_data($external_image, 'public://'.$name_dest , FILE_EXISTS_REPLACE);
    if (is_object($file) && file_exists($file->uri)) {
        $file->status = 1;
        $file = file_save($file);
        drupal_write_record('file_usage', $file);
        return (array) $file;
    }
    return null;
}

Это пример того, как его использовать.

// Load your node.
$node = node_load("9999");
// Assign your image.
$node->field_image[$node->language]['0'] = get_external_image("http://cdn.sstatic.net/drupal/img/logo.png");
// Save your node.
node_save($node);
 1
Author: Augusto Leao, 2013-05-23 19:55:11