Je fais un Drupal formulaire en utilisant FAPI (Drupal 7) dans ce formulaire, j'ai utilisé le champ managed_file
$form['image_fid'] = array(
'#title' => t('Image'),
'#type' => 'managed_file',
'#upload_location' => 'public://',
);
Je veux renommer le fichier téléchargé (faire le nom de fichier = nom de fichier + date)
Comment puis-je faire quelque chose comme ça
En supposant que vous connaissiez l'état du fichier, file_save & file_usage_add.
Dans votre rappel de soumission:
$file = file_load($form_state['values']['image_fid']);
$file->filename = 'somefilename';
$file->status = FILE_STATUS_PERMANENT;
file_save($file);
file_usage_add($file, 'yourmodule', 'foo', 1);
Plus d'informations sur le Form API Reference .
La meilleure façon de renommer un fichier est d'utiliser le module https://www.drupal.org/project/filefield_paths .
Le module File (Field) Paths étend les fonctionnalités par défaut du module File de Drupal, du module Image et de nombreux autres modules de téléchargement de fichiers, en ajoutant la possibilité d'utiliser des jetons basés sur des entités dans les chemins de destination et les noms de fichiers.
En termes simples, File (Field) Paths vous permet de trier et de renommer automatiquement vos fichiers téléchargés en utilisant des modèles de remplacement basés sur des jetons pour maintenir un système de fichiers propre et agréable.
vous pouvez également le renommer par programme avec hook_file_insert
quelque chose comme
function hook_file_insert($file)
{
$parts = pathinfo($file->filename);
if (in_array(mb_strtolower($parts['extension']), array('jpg', 'jpeg', 'gif', 'png', 'tif', 'flv', 'pdf'))) {
$uri = 'public://' . 'dsfr_' . $file->uid . '_' . $file->timestamp . '.' . $parts['extension'];
$file = file_move($file, $uri);
}
}
Vous pouvez renommer le fichier sur le contexte de téléchargement via les fonctions de validation
voici le code édité
$form['image_fid'] = array(
'#title' => t('Image'),
'#type' => 'managed_file',
'#upload_location' => 'public://',
'#upload_validators'=> array('file_validate_name' => array()),
);
function file_validate_name(stdClass $file) {
$errors = array();
//generate file name
$new_filename = convert_filename_to_filename_date($file->filename);
$file->filename = $new_filename;
//changing file location
$destination_dir = "public://file_location/";
//check if file exists. if exists rename it append incremental number until the filename is unique
$file->destination = file_destination($destination_dir.$file->filename, FILE_EXISTS_RENAME);
// If file_destination() returns FALSE then $replace == FILE_EXISTS_ERROR and
// there's an existing file so we need to bail.
if ($file->destination === FALSE) {
$errors[] = t('The file %source could not be uploaded because a file by that name already exists in the destination %directory.',
array('%source' => $file->source, '%directory' => $destination_dir));
}
return $errors;
}
Je lutte avec cela depuis quelques jours, mais cela semble fonctionner pour ce que je voulais faire:
https://api.drupal.org/api/drupal/includes!file.inc/function/file_move/7