Как получить имя файла на Perl всплывающих окон? - PullRequest
0 голосов
/ 21 сентября 2010

Я использую 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);
    }
});

1 Ответ

1 голос
/ 21 сентября 2010

Похоже, вы пытаетесь получить имя файла, загруженного пользователем. Если вы используете 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. Это сэкономит вам кучу времени в будущем.

...