如何在Windows弹出的perl上获取文件名?

时间:2010-09-21 13:21:22

标签: jquery perl file ajax-upload

我正在使用json打开用户弹出窗口。 我以前在php上使用basename( $_FILES['userfile']['name'] ),如何在perl上执行此操作?

服务器端代码:

#!/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";

客户端代码:

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);
    }
});

1 个答案:

答案 0 :(得分:1)

您似乎想要获取用户上传的文件的名称。如果您使用的是CGI模块,那么这里是解决方案:

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

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

来自the manual

  

不同的浏览器会为名称返回略有不同的内容。有些浏览器只返回文件名。其他人使用用户计算机的路径约定返回文件的完整路径。无论如何,返回的名称始终是用户计算机上文件的名称,与上传假脱机期间CGI.pm创建的临时文件的名称无关(见下文)。

<强>更新

抱歉,之前没有注意到。请在脚本开头添加use strict;。它会强制你声明所有变量。您会在print声明中看到错误输入:

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

要宣布@allowedExtensions,请在首次使用前添加my

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

此外,我相信当您打印HTTP标头时,行末尾不需要;

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

请始终use strict。它将为您节省大量时间。