0

perl でファイルをアップロードしようとしています。ftp サーバーで確認するとファイルが作成されていますが、そこではサイズが 0 です。なぜそうなっているのか不思議です。いろいろ検索して試してみましたが、解決できませんでした。手伝っていただけませんか?

これが私が使用しているコードです:

    ここにコードを入力してください
    CGI を使用します。
    私の $query = 新しい CGI;
    私の $upload_dir = "/home/public_html/upload/avatars";
    my $filename = $ses->getUserId."_".$query->param("profile_avatar");
    my $org_filename = $ses->getUserId."_".$f->{profile_avatar};
    my ($name, $path, $extension ) = fileparse ($org_filename , qr/\.[^\.]+$/ );
    $filename = $name . $拡張子;
    my $safe_filename_characters = "a-zA-Z0-9_.-";  
    $filename =~ tr/ /_/;
    $filename =~ s/[^$safe_filename_characters]//g;
    $filename =~ s/.*[\/\\](.*)/$1/;
    私の $upload_filehandle = $query->upload("profile_avatar");
    open(UPLOADFILE, ">$upload_dir/$filename") または $ses->message("$!");
    binmode UPLOADFILE;
    while (<$upload_filehandle>)
    {
        UPLOADFILE を印刷します。
    }
    UPLOADFILE を閉じます。

この変数 ($upload_filehandle) では、何も意味しない空白になっています。なぜそれが起こっているのかわかりません。どんな助けでも大歓迎です。

4

2 に答える 2

0

これが私が知っているサブルーチンです...

$query->param("profile_avatar"); パラメータを指定して呼び出す、あなたのような CGI があります。

sub upload_bin_file
{
my ($ufile) = @_;
my $ufilename = "\L$ufile";  #Force filename to be lower case
$ufilename = ~s/\\/\//g;     # Convert backslashes to forward slashes

my @dirs = split(/\//, $ufilename);    # SPlit the filename by the paths(s)
my $dfile = "$UFILE_DIR/$dirs[$#dirs]";  # This takes just the filename part
print "File uploaded to [$dfile]<BR>\n"; # Optional debug statement

open(DEST,">$dfile") or die "[F] Upload server: Could not open $dfile: $!";
binmode(DEST);
binmode($ufile);
my @src_content=<$ufile>;
print DEST @src_content;
close($ufile);
close(DEST);

$dfile; #Return the name of the file that we uploaded
}

着信ファイルの binmode が答えなのか、ファイル名からパスを削除するのかはわかりません。あなたはそれを試してみることができます:)

于 2012-10-03T09:06:30.350 に答える