IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Web Perl Discussion :

Telechargement de donnees forcé:


Sujet :

Web Perl

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 26
    Points : 28
    Points
    28
    Par défaut Telechargement de donnees forcé:
    Bonjour,

    j'utilise un script Perl/CGI qui permet de demander le telechargement d'un fichier plutot que de l'ouvrir dans le navigateur (qui lui fonctionne bien), mais le probleme que je rencontre est que lorsque c'est un fichier texte, il n'est pas transfere en mode texte ( les renvois a la ligne sont converties en carracteres speciaux !! ) alors que si je prend le meme fichier d'origine et que je fais un bouton droit "enregistre sous" il est correct.

    voici la page HTML:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <html>
    <body>
    <form name="test">
    </form> 
      <a href="/cgi-bin/download.cgi?ID=test.xml&filename=result.xml">Download File</a>
    </body>
    </html>
    et le script CGI:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    #!C:/Perl/bin/perl
     
    	use CGI ':standard' ;
     
    	my $files_location ;
    	my $ID ;
    	my $filename ;
    	my @fileholder ;
     
     
    	$ID	= param( 'ID' );
    	$filename	= param( 'filename' ) ;
     
    	if ($ID eq '') { 
    		print "Content-type: text/html\n\n"; 
    		print "You must specify a file to download."; 
    	}
    	else {
    		open(DLFILE, "<$ID") || Error('open', 'file'); 
    		@fileholder = <DLFILE>; 
    		close (DLFILE) || Error ('close', 'file'); 
     
    		open (LOG, ">>c:/TEMP/test.log") || Error2('open', 'file');
    		print LOG "$ID\n";
    		close (LOG);
     
    		print "Content-Type:application/x-download\n" ; 
    		print "Content-Disposition:attachment;filename=$filename\n\n" ;
    		print @fileholder
    	}
     
    	sub Error {
    		print "Content-type: text/html\n\n";
    		print "$ID" ;
    		print "The server can't $_[0] the $_[1]: $! \n";
    		exit;
    	}
    quelqu'un aurait-il une solution ?

    Merci d'avance.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 26
    Points : 28
    Points
    28
    Par défaut
    Pour information ci-joint les images des 2 fichiers :

    le formatage du fichier de depart : Nom : test2.jpg
Affichages : 69
Taille : 9,4 Ko

    le formatage du fichier telecharge : Nom : test1.jpg
Affichages : 43
Taille : 8,5 Ko

    ce sont les "\n" qui sont remplaces.

    Merci d'avance.

  3. #3
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    A vrai dire si tu protestes c'est bien uniquement parce que tu utilises Notepad pour regarder ton fichier... Notepad est une abomination qui doît être à jamais oubliée ! C'est le seul éditeur de texte que je connaîsse qui ne soit pas capable de gérer le format Unix de fin de ligne. Essaie avec Wordpad, normalement ça devrait mieux passer.
    Ton problème provient du fait que si tu fais le téléchargement direct, celui-ci se fait en mode texte, et les \n du fichier transmis sont donc transformés en \r\n quelque part sur le chemin, alors qu'avec ta méthode le application/x-download force le téléchargement en mode binaire où la conversion n'est pas effectuée. Plus le fait que tu ouvres ton fichier à télécharger en mode texte, ce qui est une très mauvaise idée... Utilises plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    open(DLFILE, '<:raw', $ID) || Error('open', 'file');
     
    open (LOG, ">>c:/TEMP/test.log") || Error2('open', 'file');
    print LOG "$ID\n";
    close (LOG);
     
    print "Content-Type:application/x-download\n" ; 
    print "Content-Disposition:attachment;filename=$filename\n\n" ;
    print while <DLFILE>;
    close (DLFILE) || Error ('close', 'file');
    --
    Jedaï

  4. #4
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 26
    Points : 28
    Points
    28
    Par défaut
    Merci, maintenant le fichier resultat s'ouvre nickel dans tous les editeurs.
    je ne savais pas que le x-download force au binaire.

    pour info, je ne m'en suis pas apercu avec notepad au depart, mais avec ultraEdit, en effet lors de l'ourverture du fichier il me pose la question "voulez-vous convertir le fichier en mode DOS" donc j'ai trouvé ca louche et je l'ai ouvert dans notepad car je savait qu'il affiche les carractères spéciaux.

  5. #5
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par mego
    pour info, je ne m'en suis pas apercu avec notepad au depart, mais avec ultraEdit, en effet lors de l'ourverture du fichier il me pose la question "voulez-vous convertir le fichier en mode DOS" donc j'ai trouvé ca louche et je l'ai ouvert dans notepad car je savait qu'il affiche les carractères spéciaux.
    Notepad n'affiche pas les caractères spéciaux, c'est juste qu'il ne sait même pas gérer les passages à la ligne type Unix... S'il affichait les caractères spéciaux, il mettrait autre chose qu'un petit carré blanc à la place ! SciTE par exemple sait afficher les caractères spéciaux : tu peux identifier tous les caractères spéciaux avec SciTE, tu peux même lui demander d'afficher les caractères de fin de ligne pour voir ce qu'il en est. Il y en a d'autres. En tout cas Notepad est vraiment l'un des pire éditeur de texte.

    --
    Jedaï

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 19/11/2010, 21h10
  2. [PHP-JS] redirection apres telechargement forcé
    Par marielaure2805 dans le forum Langage
    Réponses: 4
    Dernier message: 14/05/2007, 19h28
  3. probleme de telechargement force
    Par phoeniix07 dans le forum Langage
    Réponses: 4
    Dernier message: 09/06/2006, 16h55
  4. taille maximale d'une base de donnée paradox
    Par Anonymous dans le forum Paradox
    Réponses: 5
    Dernier message: 14/02/2004, 17h39
  5. [VB6] [ODBC] Référencer une base de données avec vb
    Par af.balog dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 13/09/2002, 09h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo