Changeset 17548

Show
Ignore:
Timestamp:
08/12/08 23:20:47 (5 months ago)
Author:
yto
Message:

ssuploader ver.1.1

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/misc/ssuploader.cgi

    r16263 r17548  
    1 #!/usr/bin/perl 
    2 # Small Simple Uploader 
    3 # since 2008-07-24 by yto (たつを) 
    4 # (old version: http://nais.to/~yto/tools/ssupload/ [obsolete]) 
     1#!/usr/bin/perl -T 
     2# Small Simple Uploader (ssuploader) by yto (たつを) 
     3# Version 1.1: http://chalow.net/2008-08-12-1.html 
     4# Version 1.0: http://chalow.net/2008-07-24-3.html 
     5# Version 0.0: http://nais.to/~yto/tools/ssupload/ [obsolete] 
    56use strict; 
    67use warnings; 
     
    1314binmode STDOUT, ":utf8"; 
    1415 
    15 # 準備: mkdir $outputdir; chmod 777 $outputdir 
    16 my $outputdir = "up"; 
     16# 準備: mkdir up; chmod 777 up 
     17my $up_dir = "up"; 
    1718 
    1819my $q = new CGI; 
     
    2223my $mode = $q->param('mode') || ""; 
    2324 
    24 my $fn = basename($fh); 
    25 my $outputfn = "$outputdir/$fn"; 
    26 my $timestamp = strftime "%y-%m-%d %H:%M:%S", localtime; 
    2725my $message; 
    28  
    29 if ($mode eq "up") { 
     26if ($mode eq "up" or $mode eq "delete") { 
    3027    if ($fh eq "") { 
    3128        $message = "ファイルを指定してください。"; 
    32     } elsif ($fn =~ /[\x00-\x19\x7e-\xff]|\.\./) { 
    33         $message = "ファイル名に日本語文字などの被対応文字が混じっています。"; 
    34     } elsif (-f $outputfn) { 
    35         $message = "同名のファイルが存在するので、一度削除してからアップしてください。"; 
    3629    } else { 
    37         open(F, ">", $outputfn) or die; # memo: perl -T 
    38         flock(F, 2); 
    39         while (<$fh>) { 
    40             print F $_; 
     30        fileparse_set_fstype("MSDOS"); 
     31        if (basename($fh) =~ m{^([^\x00-\x19\x7e-\xff\\/]+)$}) { 
     32            my $fn = $1; 
     33            $fn =~ s/^(.{100}).+$/$1/; 
     34            my $path = "$up_dir/$fn"; 
     35            if (-f $path) { 
     36                if ($mode eq "delete") { 
     37                    unlink $path; 
     38                } else { 
     39                    $message = "同名のファイルが存在するので、" 
     40                        ."一度削除してからアップしてください。"; 
     41                } 
     42            } elsif ($mode eq "up") { 
     43                open(my $upfh, ">", $path) or die; 
     44                flock($upfh, 2); 
     45                while (<$fh>) { 
     46                    print $upfh $_; 
     47                } 
     48                close $upfh; 
     49            } 
     50        } else { 
     51            $message = "ファイル名に日本語文字などの" 
     52                ."被対応文字が混じっています。"; 
    4153        } 
    42         close F; 
    4354    } 
    44 } elsif ($mode eq "delete") { 
    45     unlink $outputfn; 
    4655} 
    4756 
     
    5463    mtime => (stat $_)[9], 
    5564    timestamp => strftime("%y-%m-%d %H:%M:%S", localtime((stat $_)[9])), 
    56     }}<$outputdir/*>; 
     65    }}<$up_dir/*>; 
    5766 
    5867my $template = join("", <DATA>); 
     
    8493</form> 
    8594 
    86 <div><a href="<TMPL_VAR name=reloadurl>">表示の更新</a></div> 
     95<div><a href="<TMPL_VAR name=reload_url>">表示の更新</a></div> 
    8796 
    8897<div style="margin:10px"> 
     
    105114</div> 
    106115 
    107 <div><a href="<TMPL_VAR name=reloadurl>">表示の更新</a></div> 
     116<div><a href="<TMPL_VAR name=reload_url>">表示の更新</a></div> 
    108117</body> 
    109118</html>