Это частичный ответ на ваш вопрос, так как я пытаюсь сделать нечто подобное, но с видео материалом.
Вы можете создать узел как тип контента, сохранить необходимый вам тип медиа (посмотрите код медиа для соответствующего mime / типа и функций, которые вам нужно вызвать). Вам, вероятно, потребуется установить поле мультимедийного ресурса и использовать селектор медиа-файла в типе поля.
Проблема, с которой я сталкиваюсь, заключается в том, чтобы браузер отображал ее в созданном узле, но сейчас я работаю над этим.
ОБНОВИТЬ
Получив немного дальше. После того, как вы сохранили файл мультимедиа (используя медиа-API), свяжите идентификатор файла с идентификатором узла, используя file_usage_add () . Вероятно, вам также нужно будет связать файл в поле, добавленном при создании поля медиаресурса.
Убедитесь, что ваш php.ini разрешает allow_url_fopen. Затем вы можете использовать что-то вроде этого в вашем модуле:
Используйте функцию php file_get_contents ()
http://www.php.net/manual/en/function.file-get-contents.php
а затем используйте Drupal API file_save_data ()
http://api.drupal.org/api/drupal/includes--file.inc/function/file_save_data/7
Тогда вы сможете вызвать его с помощью и сохранить его на узле и т. Д.
Редактировать:
Как указано в комментариях, вы можете использовать функцию system_retrieve_file. См .: https://api.drupal.org/api/drupal/modules!system!system.module/function/system_retrieve_file/7.
источник
$file = system_retrieve_file('http://drupal.org/files/issues/druplicon_2.png', NULL, TRUE, FILE_EXISTS_RENAME);
Вот мой рабочий пример.
источник
system_retrieve_file()
и затем сохраняете его как постоянныйFILE_STATUS_PERMANENT
? Я не вижу смысла вашей пользовательской функции?Это не прямой ответ, но убедитесь, что вы уже знаете о модуле Filefield Sources , который делает это для изображений в целом. Это может удовлетворить ваши потребности самостоятельно; Я не знаю, полезно ли это со СМИ.
источник
В дополнение к ответу @tecjam: вы должны использовать drupal_http_request () вместо file_get_contents () , это дает вам больше контроля над процессом. Но в целом этот метод работает, как и ожидалось.
источник
источник
system_retrieve_file()
(который делает все это для вас и избегает проблем с серверами, гдеfile_get_contents()
нет)?