Drupal 7的用户保存图片编程(Drupal 7 save user picture progr

2019-08-17 10:18发布

我发现这个脚本http://d.danylevskyi.com/node/7我已经用作下面的代码首发。

我们的目标是能够节省用户的图片:

<?php
define('DRUPAL_ROOT', getcwd());

require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

$uid = 99;
$account = user_load($uid);

// get image information
$image_path = 'public://avatars/upload/b8f1e69e83aa12cdd3d2babfbcd1fe27_4.gif';
$image_info = image_get_info($image_path);

// create file object
$file = new StdClass();
$file->uid = $uid;
$file->uri = $image_path;
$file->filemime = $image_info['mime_type'];
$file->status = 0; // Yes! Set status to 0 in order to save temporary file.
$file->filesize = $image_info['file_size'];

// standard Drupal validators for user pictures
$validators = array(
    'file_validate_is_image' => array(),
    'file_validate_image_resolution' => array(variable_get('user_picture_dimensions', '85x85')),
    'file_validate_size' => array(variable_get('user_picture_file_size', '30') * 1024),
);

// here all the magic :) 
$errors = file_validate($file, $validators);
if (empty($errors)) {

    file_save($file);
    $edit['picture'] = $file;
    user_save($account, $edit);
}
?>

一张图片在网站/默认/文件/图片创建/名称为子母99-1362753611.gif

一切似乎都在不同的是file_managed表正确:

  1. 文件名字段为空
  2. 在URI区域显示市民://avatars/upload/b8f1e69e83aa12cdd3d2babfbcd1fe27_4.gif
  3. 状态字段被设置为0(临时)

在用户表中的图片字段获取与上述条目的FID更新。

我猜想,file_managed表应该存储最终文件(在网站/默认/图片),而不是原来的文件信息和用户表应该链接到一个太。

任何想法,我怎么能做到这一点? 我很新的Drupal的API。 谢谢。

编辑:

我明白,我给原始文件的file_save和user_save功能。 但哪一个实际创建的网站文件/默认/图片/?

Answer 1:

尝试加入以下代码:

$file->filename = drupal_basename($image_path);
$file->status   = FILE_STATUS_PERMANENT;
$file = file_save($file);  // Use this instead of your current file_save

这是否帮助?

------------------编辑------------------

如果您想保存该文件的副本在新的位置,你可以替换上面的东西,如第三行

// Save the file to the root of the files directory.
  $file = file_copy($file, 'public://');


文章来源: Drupal 7 save user picture programmatically