以编程方式保存来自外部URL的图像 - drupal

Ser*_*jas 1 php drupal

我正在尝试使用last.fm创建一个节点.

$field = content_fields('field_my_image',"events"); //to get field
$validators = array_merge(filefield_widget_upload_validators($field), imagefield_widget_upload_validators($field)); //image validator
$files_path = filefield_widget_file_path($field); //save path
$src_path=$data->image[3]; // img url from last.fm eg: http://userserve-ak.last.fm/serve/252/502025.jpg
$file = field_file_save_file($src_path, $validators, $files_path, FILE_EXISTS_REPLACE);//save file
$nodenew->field_my_image = array(
                array(
                    'fid' => $file['fid'],
                    'title' => $file['filename'],
                    'filename' => $file['filename'],
                    'filepath' => $file['filepath'],
                    'filesize' => $file['filesize'],
                    'filemime' => $file['filemime'],
 ),
);//insert file details to node
Run Code Online (Sandbox Code Playgroud)

现在节点已创建,但没有图像并且无法保存消息"所选文件502025.jpg".该文件不是已知的图像格式.

mln*_*ncn 7

Drupal 7为您正在执行的操作提供了一个函数:system_retrieve_file().

应该有一个文件模块功能,用于根据URL将文件保存到Drupal,但至少该功能确实存在......只是不在任何人看的地方.您可以使用system_retrieve_file()和第三个参数TRUE来创建托管文件(调用file_save_data()).

用法,一个比Jav_Rock更简单但更基本相同的例子,只是跳过哈希路径的好坏:

  $url = 'http://example.com/picture.png';
  $directory = file_build_uri('custom_directory');
  if (!file_prepare_directory($directory, FILE_CREATE_DIRECTORY)) {
    // If our directory doesn't exist and can't be created, use the default.
    $directory = NULL;
  }
  $file = system_retrieve_file($url, $directory, TRUE);
Run Code Online (Sandbox Code Playgroud)