Drupal 7:上传时重命名文件(通过文件字段)

时间:2012-12-16 17:01:37

标签: file-upload drupal-7 filefield imagefield

我正在寻找一种方法来重命名用户通过文件字段上传的文件。例如,使用uniqid重命名用户个人资料照片。

我在" Drupal 6: How to Change Filename on Upload"找到了一个很好的D6解决方案。但是找不到D7的任何东西。

另一种选择是使用File (Field) Paths,但是:

  1. 模块会在我的设置上发出警告。
  2. 为某个特定用途安装通用模块似乎有点过分。

2 个答案:

答案 0 :(得分:3)

您可以根据需要更改hook_file_presave上传的每个文件 例如

function yourmodulename_file_presave($file) {
  $parts = pathinfo($file->filename);
  $file->filename = 'mypattern_'.$file->uid .'_'. $file->timestamp . '.' . $parts['extension'];
}

但是此方法不重命名filname(它只是重命名file_managed表中的文件名),如果你想重命名文件名(uri of file)你应该使用下面的代码

function hook_file_insert($file) {
  $parts = pathinfo($file->filename);
  $uri = 'public://'.'mypattern_'.$file->uid .'_'. $file->timestamp . '.' . $parts['extension'];
  $file=file_move($file, $uri);
}

答案 1 :(得分:1)

重要的部分是替换 SOMEFILENAME

function MYMODULE_background_form_validate($form, &$form_state) {
  $file = file_save_upload('file', array(
      'file_validate_is_image' => array(),
      'file_validate_extensions' => array('jpg'),
  ));
  if ($file) {
    if ($file = file_move($file, 'public://**SOMEFILENAME**', FILE_EXISTS_REPLACE)) {
      $form_state['values']['file'] = $file;
    }
    else {
      form_set_error('file', t('Failed to write the uploaded file the site\'s file folder.'));
    }
  }
  else {
    form_set_error('file', t('No file was uploaded.'));
  }
}

function MYMODULE_background_form_submit(&$form, &$form_state) {
  $file=$form_state['values']['file'];
  unset($form_state['values']['file']);
  $file->status = FILE_STATUS_PERMANENT;
  file_save($file);
  drupal_set_message(t('Thanks, the background has been saved.'));
}
相关问题