CGI-BBS > CGI > Perl > 日本語名を可能にするには??


カレッヂ
カレッヂ


質問者 たぬぽん  投稿日 6/11(月) 14:04:43
教えて下さい。
日本語名のファイルのアップロードを可能にしたいのですが、どうしたらいいのでしょうか??
日本語名のファイルのアップロード終了後に、ファイル名を変更(英語に)したいのです。
↓のソースは英語のみのファイル名をアップロードしたときに、ファイル名を(もちろん英語に)変更しています。
どうしたらよいのでしょう?? よろしくお願いします。
---------------------------------------------------
$fname=$FORM{'fname'};

if($fname){
$fname_new=$fname;
$fname_new =~ s/^[\d]+__//;
if($fname_new =~ /[^\d\w_\-\.]/){
  $fname=$UploadDir . '/' . $fname;
  system("rm $fname");
  $Ok_Message="<font size=+2>$fname_old不可</font><br>\n";
}else{
$fname_old=$fname_new;
$fname=$UploadDir . '/' . $fname;
$fname_new=$UploadDir . '/' . $fname_new;
system("mv $fname $fname_new");
chmod 0604,"$fname_new";        
open TS, $fname_new
  or die "FROMファイルOPENエラー";
open JK, ">$UploadDir/wyotei.JTD"
  or die "TOファイルOPENエラー";
while (<TS>) {
   print JK $_;
}
close TS;
close JK;
$Ok_Message="<font size=+2>$fname_old完了</font><br>\n";
}
}
回答者 まさ  [削除]  投稿日 6/11(月) 20:54:52
ヒントだけ示します。

以下を実行すると、$filenameに指定したファイルがフルパスで入ってきます。
もちろん日本語もOKです。
$fileには画像ファイルの中身がバイナリーで入っています。

ですから$filenameを適当に処理して、そのファイル名で$fileを書き込めば
アップロード終了です。

もちろんこのスクリプトはかなりいいかげんなので実用的ではないです。
実際に組み込む場合は書き換えないといけません。あくまで概要だけです。

これはCGI.pmを使っていますが、Perlのバージョンが5以上ならば標準で入って
いますのでどのような環境でも動きます。

-----------------------------------------
<INPUT TYPE="file" NAME="File">
-----------------------------------------
#!/usr/local/bin/perl

use CGI;

$query = new CGI;

$filename = $query->param('File');
while(read($filename, $buffer, 2048)) { $file .= $buffer; }

print "Content-type: text/html\n\n";
print "$filename\n";
exit;
-----------------------------------------

返信(回答)する


Web裏技