3

ファイルフィールドを介してユーザーがアップロードしたファイルの名前を変更する方法を探しています。たとえば、 を使用してユーザー プロフィール写真の名前を変更しますuniqid

「 Drupal 6: アップロード時にファイル名を変更する方法」で D6 の適切な解決策を見つけましたが、D7 については何も見つかりません。

別のオプションはFile (Field) Pathsを使用することですが、次のとおりです。

  1. モジュールが原因で、セットアップ時に警告が表示されます。
  2. 非常に特定の目的のために一般的なモジュールをインストールするのは、少しやり過ぎのようです。
4

2 に答える 2

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) の名前も変更する場合は、以下のコードを使用する必要があります

function hook_file_insert($file) {
  $parts = pathinfo($file->filename);
  $uri = 'public://'.'mypattern_'.$file->uid .'_'. $file->timestamp . '.' . $parts['extension'];
  $file=file_move($file, $uri);
}
于 2015-04-30T08:01:08.920 に答える
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.'));
}
于 2012-12-31T17:29:40.470 に答える