2010-09-21 15 views
0

J'utilise json pour ouvrir le popup de l'utilisateur. J'avais l'habitude d'utiliser basename($_FILES['userfile']['name']) sur php, comment faire ça sur perl?comment obtenir le nom de fichier sur perl de Windows popup?

code côté serveur:

#!/usr/bin/perl 
use CGI; 

print "Content-type: text/html; 
Cache-Control: no-cache; 
charset=utf-8\n\n"; 

@allowedExtensions =("jpg","tiff","gif","eps","jpeg","png"); 

my $q = CGI->new(); 

my $filename = $q->upload('userfile'); 

print "file name is $file_name"; 

code côté client:

var post_obj = new Object(); 

new AjaxUpload('upload_attachment_button', { 
    action: 'upload.cgi', 
    type: "POST", 
    data: post_obj, 

    onChange: function() {}, 
    onSubmit: function() { 
     $("#upload_attachment_button").addClass('ui-state-disabled'); 
     $("#upload_proj_message").html('<span> class="loading">uploading...</span>'); 
    }, 
    onComplete: function(file, response) { 
     $("#upload_attachment_button").removeClass('ui-state-disabled'); 
     alert(response); 
    } 
}); 

Répondre

1

On dirait que vous essayez d'obtenir le nom du fichier téléchargé par l'utilisateur. Si vous utilisez le module CGI, alors voici la solution:

use CGI; 
my $q = CGI->new(); 

my $filename = $q->param('userfile'); ## retrive file name of uploaded file 

De the manual:

Différents navigateurs retour des choses légèrement différentes pour le nom. Certains navigateurs renvoient uniquement le nom de fichier. D'autres retournent le chemin d'accès complet au fichier, en utilisant les conventions de chemin de la machine de l'utilisateur. Quoi qu'il en soit, le nom renvoyé est toujours le nom du fichier sur la machine de l'utilisateur et n'est pas lié au nom du fichier temporaire créé par CGI.pm lors du spoulage de téléchargement (voir ci-dessous).

Mise à jour:

Désolé, n'a pas remarqué auparavant. S'il vous plaît ajouter use strict; au début du script. Cela va vous forcer à déclarer toutes les variables. Vous verrez dans print déclaration dactylographiques:

print "file name is $filename"; ## must be $filename 

Pour déclarer @allowedExtensions ajouter juste my avant la première utilisation:

my @allowedExtensions =("jpg","tiff","gif","eps","jpeg","png"); 

Je crois aussi que vous n'avez pas besoin ; à la fin des lignes lorsque vous print En-têtes HTTP:

print "Content-type: text/html 
Cache-Control: no-cache 
charset=utf-8\n\n"; 

Et veuillez toujours use strict. Cela vous fera économiser beaucoup de temps à l'avenir.

+0

Je l'ai essayé et cela n'a pas fonctionné. Le nom du fichier est retourné vide. J'ai simplement essayé d'imprimer le nom du fichier retourné. – Luci

+0

@zeina Pouvez-vous montrer votre code? –

+0

@Ivan: J'ai ajouté le code. Veuillez noter que j'utilise json du côté client. – Luci