0

ユーザーポップアップを開くために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);
    }
});
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 に答える