0

我正在使用 json 打开用户弹出窗口。我以前 basename( $_FILES['userfile']['name'] )在php上使用,如何在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);
    }
});
4

1 回答 1

1

看起来您试图获取用户上传的文件的名称。如果您使用的是CGI模块,那么这里是解决方案:

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

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

手册

不同的浏览器会返回稍微不同的名称。一些浏览器只返回文件名。其他人使用用户机器的路径约定返回文件的完整路径。无论如何,返回的名称始终是用户机器上文件的名称,并且与 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。它会在未来为您节省大量时间。

于 2010-09-21T13:43:36.420 回答