[Up] [Next] [Previous]

ファイルのアップロード

今まではファイルのアップロードができませんでしたが、HTTPを変更すること なく、ファイルのアップロードが可能になりました。

ファイルのアップロードは、まず "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);

Sending file:

画面

<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 エンコードして、 アップロードできます。

Sending file 1:

Sending file 2:

<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 の作った ファイルアップロードスクリプトです。


[Up] [Next] [Previous]