我正在寻找一种方法来重命名用户通过文件字段上传的文件。例如,使用 重命名用户个人资料照片uniqid
。
我在“ Drupal 6: How to Change Filename on Upload ”中找到了适用于 D6 的一个很好的解决方案,但找不到适用于 D7 的任何内容。
另一种选择是使用File (Field) Paths,但是:
- 该模块导致我的设置出现警告。
- 为特定目的安装通用模块似乎有点矫枉过正。
我正在寻找一种方法来重命名用户通过文件字段上传的文件。例如,使用 重命名用户个人资料照片uniqid
。
我在“ Drupal 6: How to Change Filename on Upload ”中找到了适用于 D6 的一个很好的解决方案,但找不到适用于 D7 的任何内容。
另一种选择是使用File (Field) Paths,但是:
您可以通过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);
}
重要的部分是替换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.'));
}