ファイルのアップロードは、まず "Browse..."ボタンを押して、ファ イルを選択します。それが完了してから、実行ボタンを押してください。
Netscape 2.0 では、ゼロックス社の Larry Masinter氏、 Ernesto Nebel氏によって 提案された方法(RFC1867)を採用しており、 <FORM>タグの ENCTYPE属性を使用して次のように指 定します。
<FORM ENCTYPE="multipart/form-data" ACTION="URL" METHOD=POST> 送出ファイル: <INPUT NAME="userfile" TYPE="file"> <INPUT TYPE="submit" VALUE="ファイル送出"> </FORM>ACTION部に mailtoスキームが利用できますので、簡単な例 として次のよう例が考えられます。ユーザが選択したファイルを "taro@foo.co.jp"にメールで送る事ができます。
<FORM ENCTYPE="multipart/form-data" ACTION="mailto:taro@foo.co.jp" METHOD=POST> Sending file: <INPUT TYPE="file" NAME="myfile"><P> <INPUT TYPE="submit" VALUE="メール"> </FORM>
ファイルをアップルードする際には、サーバ側でちょっとした仕掛けが必要で す。ファイルはACTION部で記述されたCGIスクリプトへの標準入力と して渡されますから、以下のようなスクリプトを実行します。
#!/usr/bin/perl $|=1; print "Content-type: text/html\n\n"; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } elsif ($ENV{'REQUEST_METHOD'} eq "GET") { $buffer=$ENV{'QUERY_STRING'}; } $buffer =~ /^(.+)\r\n/; print <<EOF; <HTML> <HEAD><TITLE>Thank you very much</TITLE></HTML> <BODY> <h2>Thank you very much</h2> </BODY> </HTML> EOF open(UPLD, "> /directory/file"); print UPLD $buffer; close(UPLD);
画面
<FORM ENCTYPE="multipart/form-data" ACTION="/cgi-bin/fileupload" METHOD=POST> Sending file: <INPUT TYPE="file" NAME="myfile"><p> <INPUT TYPE="submit" VALUE="転送"><P> </FORM>
まだ、MIME 化されたままのファイルですが、これを綺麗に整形すれば、 望みの結果が得られると思います。
また、MIME TYPE は複数のファイルを一度に転送できるようになっているので、 INPUTタグを複数設定すれば、複数のファイルを一度に MIME エンコードして、 アップロードできます。
<FORM ENCTYPE="multipart/form-data" ACTION="/cgi-bin/fileupload" METHOD=POST> Sending file 1: <INPUT TYPE="file" NAME="myfile1"><p> Sending file 2: <INPUT TYPE="file" NAME="myfile2"><p> <INPUT TYPE="submit" VALUE="転送"><P> </FORM>
SIMON Tneoh Chee-Boon の作った
ファイルアップロードスクリプトです。