Catégories:
Bonjour / bonsoir à tous,
Mon site commence à prendre tournure, donc il se remplit. Bien.
Cela dit tous les fichiers attachés tombent dans le dossier drupal/files, ça m’ennuie j’aurais préféré que chaque livre range les fichiers attachés des diverses pages dans des dossiers différents (plus simple pour les téléchargements). Je crains un peu d’avoir + de 200 fichiers dans le dossier files …
Quel module sait faire ça ?
- Vous devez vous identifier ou créer un compte pour écrire des commentaires

Bonjour,
J’ai le même problème que toi …
As-tu trouvé une solution ?
elodie30
23
Salut,
J’ai réglé ce problème en créant une page avec un code php qui gère lui même l’upload de fichier :
le formulaire et le code de l’upload se trouvant dans la même page, sinon la page n’est plus reconnu comme un contenu de Drupal.
Voici un exemple simple d’upload. Vous pouvez (et devez) ajouter des controle sur la taille (et les extensions sur le fichier) afin de sécuriser les uploads :
<?php /* Si le formulaire a été validé <em>/if( isset($_POST['sub']) )
{
/</em> On récupère le nom du fichier <em>/
$fichier = basename($_FILES['depot']['name']);
/</em> On récupère l'extension du fichier, ex : ".txt" <em>/
$extension = strrchr($fichier, '.');
/</em> On enlève l'extension au nom du fichier <em>/
$fichier = preg_replace('#([a-z0-9_-]+).[a-z0-9]{2,4}#','$1', $fichier);
/</em> On insère le timestamp au nom du fichier (juste avant l'extension)<em>/
$time = time();
$nom_fichier = $fichier.$time.$extension;
/</em> On récupère la source à télécharger <em>/
$source = $_FILES['depot']['tmp_name'];
/</em> On définie dans quel répertoire sera stocker le fichier <em>/
$dossier = "files/mon_repertoire/".$nom_fichier; // Attention, les répertoires doivent exister et être en droit 755(minimum)
if ( move_uploaded_file($source,$dossier) ) //Si la fonction renvoie TRUE, l'upload à fonctionné
{
chmod ( $dossier , 0755 ); // Droit du fichier uploadé
echo $nom_fichier.' a été uploadé.';
}
{else //Sinon (la fonction renvoie FALSE).
{
echo $nom_fichier."n'a pas été uploadé !";
}
}
else /</em> Si le formulaire n'a pas été validé, on l'affiche */
?>
<form method="POST" action="" enctype="multipart/form-data">
<table>
<tr>
<td colspan=2><input type="file" name="depot" size="40"></td>
<input type="hidden" name="sub" value="OK">
</tr>
<tr>
<td colspan=2>
<input type="submit" name="envoyer" value="uploader">
</td>
</tr>
</table>
</form>
<?php
}
?>
spinozandraque
10
Merci beaucoup pour ce code.
Mais où l’insères-tu ? dans un fichier séparé (comme tu fais le liens ac drupal, dans le fichier template.tpl.php ???
elodie30
23
En faite, je place ce code dans un fichier («upload.php») que je place ensuite dans le dossier de Drupal.
Ensuite, je crée une Page (mais tu peux le mettre dans un autre type de contenu) et je met dans le body :
<?php include('upload.php'); ?>avec le Format d’entrée : PHP code (il faut l’interpréteur PHP).
Ce qui fait que j’ai un formulaire unique pour tous les uploads.
Remarque : si tu as plusieurs type d’upload à faire, tu peux faire plusieurs Page de ce genre.
Maintenant, si tu veux attacher ces fichiers à un contenu en particulier, il faut que tu modifies la base de donnée de Drupal afin d’enregistrer ton fichier et l’attacher dans la bd. En gros, si tu as créé un contenue ayant la node $nid, le code ressemble à peut près à ceci :
Le module upload doit être installé pour avoir la table file de crée.
Ensuite, insert, après la ligne
<?phpecho $nom_fichier.' a été uploadé.';
?>
, le code :
<?php$nid = 12; // Ici je prend comme exemple un contenu ayant pour node 12.
/* Connexion à la base <em>/
global $db_url;
db_connect($db_url);
/</em> On détermine le prochain fid de disponible <em>/
db_query("INSERT INTO <code>intellicast_groupware</code>.<code>files</code> (<code>fid</code> ,<code>nid</code> ,<code>filename</code> ,<code>filepath</code> ,<code>filemime</code> ,<code>filesize</code>) VALUES ('".$fid."', '".$nid."', '".$nom_fichier."', '".$dossier."', 'file/video', '".filesize($dossier)."');");$data=db_fetch_array(db_query("SELECT fid FROM <code>files</code> ORDER BY fid DESC ;"));
$fid = $data['fid']+1;
/</em> On enregistre le fichier dans la table file : il est alors attaché au contenue de node $nid */
?>
Attention, j’ai réutilisé les variables du code que j’ai mis.
Voilà, j’espère que ça t’aideras.
spinozandraque
10
Bonjour,
J’aimerais ajouter un champ qui permet de joindre un fichier, lorsqu’un utilisateur veut créer un nouveau compte.
J’ai activé le module profil pour les informations des utilisateurs, j’ai ajouté les champs Nom, Prénom, Adresse, etc… mais j’aimerais maintenant qu’ils puissent joindre un fichier (CV) avec leur inscription. J’ai le module upload qui est installé.
Comment est-ce que je peux faire ça ?
D’avance merci beaucoup si vous avez une solution.
Bonne après-midi
Xavier
xavier_gomez
19
Bonjour Xavier,
J’ai exactement le meme probleme que toi. As-tu trouve une solution ?
cryalex
1
Il y a un module upload path qui est fait pour cela.
zmove
319
Merci beaucoup à vous deux.
Le module est en cours de développement mais merci du tuyau.
elodie30
23
Je déjà utilisé il y a plusieurs mois, il fonctionnait bien. Je pense qu’il est suffisament avancé pour être testé.
zmove
319
Il est maintenant opérationnel, apparement.
graou
182
Bonjour à tous,
Il y a un excellent module pour ça c’est Filefield Paths :
http://drupal.org/project/filefield_paths
Cordialement,
Thib
Thib
458
bonjour,
j’ai galéré depuis hier pour un pb de chemin chu sur windows
là c’est reglé il dit fichier a été uplodé mais dans le dossier il y’a rien
qu’en penses tu ?
nasma
8