当前位置: 首页>>建站开发>>正文


如何以编程方式使用媒体模块从外部URL添加图像?

webfans 建站开发 , , 去评论

问题描述

我想以编程方式从外部URL添加图像,并让模块存储并显示图像的本地副本。我怎样才能做到这一点?通常,我会在创建新节点时点击”select media”按钮,但我想通过代码来完成。

最佳解决思路

这是对你的问题的部分回答,因为我试图做类似的事情,但有视频材料。

您可以创建节点作为内容类型,保存您需要的媒体类型(通过媒体代码查看相关MIME /类型以及需要调用的功能)。您可能需要设置多媒体资产字段并在字段类型中使用媒体文件选择器。

我遇到的一个问题是让浏览器在创建的节点中显示它,但我目前正在努力。

UPDATE

进一步了一点。一旦保存了媒体文件(使用媒体API),使用file_usage_add()将文件ID与节点ID相关联。您可能还需要在创建媒体资产字段时添加的字段中关联该文件。

次佳解决思路

确保你的php.ini允许allow_url_fopen。然后你可以在你的模块中使用这样的东西:

$image = file_get_contents('http://drupal.org/files/issues/druplicon_2.png'); // string
$file = file_save_data($image, 'public://druplicon.png',FILE_EXISTS_REPLACE);

使用php’s 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

然后你应该可以使用它并将其保存到节点等。

$node = new stdClass;
$node->type = 'node_type';
node_object_prepare($node);
$node->field_image[LANGUAGE_NONE]['0']['fid'] = $file->fid;
node_save($node);

编辑:

正如评论中所指出的那样,您可以使用函数system_retrieve_file请参阅:https://api.drupal.org/api/drupal/modules!system!system.module/function/system_retrieve_file/7

第三种解决思路

这是我的工作示例。

$remoteDocPath = 'http://drupal.org/files/issues/druplicon_2.png';
$doc = system_retrieve_file($remoteDocPath, NULL, FALSE, FILE_EXISTS_REPLACE);
$file = drupal_add_existing_file($doc);

$node = new stdClass;
$node->type = 'node_type';
node_object_prepare($node);
$node->field_image[LANGUAGE_NONE]['0']['fid'] = $file->fid;
node_save($node);

function drupal_add_existing_file($file_drupal_path, $uid = 1, $status = FILE_STATUS_PERMANENT) {
  $files = file_load_multiple(array(), array('uri' => $file_drupal_path));
  $file = reset($files);

  if (!$file) {
    $file = (object) array(
        'filename' => basename($file_drupal_path),
        'filepath' => $file_drupal_path,
        'filemime' => file_get_mimetype($file_drupal_path),
        'filesize' => filesize($file_drupal_path),
        'uid' => $uid,
        'status' => $status,
        'timestamp' => time(),
        'uri' => $file_drupal_path,
    );
    drupal_write_record('file_managed', $file);
  }
  return $file;
}

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/1999.html,转载请务必附带本地址声明。