Récupérer le chemin de fichier [Perl] - Perl - Programmation
Marsh Posté le 09-08-2005 à 18:44:04
et le chemin tu le connais? Pasque sinon on peu pas l'inventer si ton formulaire ne le connait pas. c'est donc du coté de ton formulaire d'upload qu'il faut regarder:
- esque 'file' doit contenir le chemin complet?
- esqu'un autre parametre le contient?
Marsh Posté le 09-08-2005 à 18:44:46
deja test systematiquement la sortie de ton open:
open(COPIE, '>'....) || die "impossible d'ouvire le fichier: $!";
Marsh Posté le 10-08-2005 à 10:25:17
Le truc c'est que le open marche, vu qu'il me créé un fichier la ou il faut avec le bon nom.
Le chemin du fichier je le vois dans mon formulaire quand utilise le <INPUT type=file...>.
Malheureusement quand je fais param('file'), sous firefox il ne me retourne que le nom du fichier, et je voudrais qu'il me retourne le chemin complet.
Or je veux qu'il soit compatible tout type de navigateur.
Marsh Posté le 10-08-2005 à 11:02:14
si le fichier est copié c'est bien que le chemin complet est "$value/$donnees" non?
Marsh Posté le 10-08-2005 à 11:10:41
Oui ça c'est le fichier copié sur le serveur. En fait ça le copie au bon endroit.
Dans le copie ayant pour filehandle ORIGINAL, c'est là que je n'arrive pas à récupérer le chemin du fichier que je veux uploader. En utilisant un input type=text, non? en hidden?
En tout cas, c'est vraiment ce =)=)"=)'à" de chemin qui me manque, si je le rentre en dur ça marche nickel chrome d'acier trempé ! Merc ide ton aide !
Marsh Posté le 10-08-2005 à 11:35:56
je comprend pas trop ton histoire...
tu veux le chemin du fichier sur le post du client? pour koi faire?
Marsh Posté le 10-08-2005 à 11:39:45
En gros je veux faire un copier coller ( ou un upload ), or pour y arriver je dois faire un :
open FICHIER_CLIENT #et la j'ai le chemin contenu de le input file#
open FICHIER_SERVEUR "Ici le chemin que le client a spécifié, mais ça c'est bon#
Donc voilà, je n'arrive pas à faire ce open du fichier client.
Merci
Marsh Posté le 10-08-2005 à 14:02:27
c'est normal que tu ne puisse pas ouvire ce fichier: il est chez le client, et ton script s'execute sur le serveur!
Pour faire un upload il faut que le client t'envois le contenu de son fichier dans sa requete (dans le corps du POST).
Le module CGI gere ca.
Marsh Posté le 10-08-2005 à 14:12:50
Oui mais avec la fonction
$mavariable = param('file')
normalement je récupère le nom de fichier, seulement le nom, je veux tout le chemin.
Sinon peux tu me mettre un exemple stp? Parce que la j'avoue que je suis perdu !
Marsh Posté le 10-08-2005 à 14:59:11
le chemin ne te servira à rien: tu ne PEUX PAS aller ouvrire le fichier toi meme sur le poste du client!
evidemment tu peux le faire si le serveur et le client sont sur la meme machine, mais j'imagine que ca n'est pas ce que tu veux...
donc comme tu ne peux pas toi meme faire un open sur ce fichier, c'est le client qui doit t'en envoyer le contenu. Tu aura alors ce contnu dans une variable que tu pourra ensuite printer vers ton fichier de destination sur ton serveur.
Regarde la doc du module CGI, tout est explique:
http://search.cpan.org/~lds/CGI.pm-3.11/CGI.pm
Marsh Posté le 10-08-2005 à 15:23:21
Et comment je fais alors pour un upload? Aurais tu un srcipt dispo sous la main? Sinon c'est pas grave, merci bien !
Marsh Posté le 10-08-2005 à 15:37:14
http://search.cpan.org/~lds/CGI.pm [...] LOAD_FIELD
Citation : Different browsers will return slightly different things for the name. Some browsers return the filename only. Others return the full path to the file, using the path conventions of the user's machine. Regardless, the name returned is always the name of the file on the user's machine, and is unrelated to the name of the temporary file that CGI.pm creates during upload spooling (see below). |
et just en dessous ils expliquent
en gros ton nom de fichier est en fait un filehandle perl, donc il te suffit de faire:
while my $line (<$donnees> ) {
print OUTPUT $line;
}
Marsh Posté le 10-08-2005 à 15:42:58
Désolé d'être relou, mais ton script que tu m'as filé ne marche pas, il comprend pas le : while my $line...
Si t'avais un autre système avec un for each peut être, ou un truc dans le genre.
En tout cas merci.
La doc que tu m'as filé existe en français, mais ça ne marche pas chez moi.
Marsh Posté le 10-08-2005 à 15:52:20
J'ai réalisé ça :
foreach my $line (<$donnees> ) {
print COPIE $line;
}
mais ça ne marche pas non plus, il me créé un fichier avec le bon nom, mais le fichier est vide.
Marsh Posté le 10-08-2005 à 16:36:27
j'ai pas testé, c'etait juste pour te montrer
lit la doc (je t'ai filé le lien qui pointe DIRECTEMENT sur la bonne section) !!!!!
Marsh Posté le 10-08-2005 à 16:37:15
Oui je l'ai lu la doc...Même en francais en plus. Mais ça ne marche pas, mon fichier créé est vide.
Marsh Posté le 10-08-2005 à 16:41:45
Regarde dans la doc il mette faire ça :
#J'ai changé pour mettre mes noms de variables
#ici je récupère le nom du fichier
$donnees = param('file');
# Read a text file and print it out
while (<$donnees> ) {
print;
}
# Copy a binary file to somewhere safe
open (COPIE,">>".$value."/".$donnees);
while ($bytesread=read($donnees,$buffer,1024)) {
print COPIE $buffer;
}
Mais mon fichier est toujours vide...
$donnees ne m'affiche rien, pour moi en faisant print $donnees, j'obtiens le nom du fichier.
Et au final le fichier créé est vide.
Marsh Posté le 10-08-2005 à 16:54:46
en dessous ils expliquent une autre method pour chopper le handler
et puis met un "use strict;" dans ton code
Marsh Posté le 11-08-2005 à 10:29:58
Ouai je comprends que je ne récupère qu'une chaine de caractère et donc j'utilise $donnees = upload('file');
Mais je n'arrive pas à utiliser la suite, je ne comprends pas trop. Merci de ton aide
Marsh Posté le 11-08-2005 à 10:54:59
Je ne récupère rien dans mon filehandle...
Voilà la suite de mon code pourtant :
open (COPIE,">".$value."/".$donne);
while ($bytesread=read($donnees,$buffer,1024)) {
print COPIE $buffer;
}
avec $donne = param('file');
J'ai donc toujours un fichier vide de créé.
Marsh Posté le 11-08-2005 à 14:30:15
Bon ben, si quelqu'un à un petit script perl pour uploader des fichiers?
Je n'y arrive pas malgré tout ce que j'ai pu trouvé, merci !
Marsh Posté le 09-08-2005 à 16:27:26
Bonjour, j'aimerai récupérer le chemin complet d'un fichier pour faireun upload avec le CGI.
Voici mon code :
if (defined(param('ok_depos'))){
print "On dépose le fichier<br />";
$donnees = param('file');
print "Dans donnees : ".$donnees,p;
open(ORIGINAL,'CTest/test_jsExemple.html') || die "Impossible de d'ouvrir le fichier original"; #C'est ici que j'ai un problème, si je remplace le chemin par $donnees, je n'ai rien qui se passe
open COPIE, ">".$value."/".$donnees;
print "On arrive ici...",p;
while (<ORIGINAL> ){
print COPIE $_;
}
close(COPIE);
close(ORIGINAL);
print "Fichier déposé";
}
En fait, j'utilise Firefox, et param('file'), ne me retourne que le nom du fichier, or j'aurais besoin du chemin complet pour copier ce fichier sur le serveur.
Merci d'avance