ダイナミックドキュメント機能 フォームとCGI目次 アクセスカウンターについて

ファイルのアップロード

今ではHTTPを変更することなく、クライアント(読者)からファイルのアップロードが可能になりました。その方法は、まず 「参照」ボタンを押してファイルを選択し、「実行」ボタンを押すだけです。

ネットスケープ2.0からは、ゼロックス社のLarry MasinterErnesto 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スキームが利用できますので、次のようなパターンも考えられます。これは読者が選択したファイルを"mail@yokochin.com"へメールで送る例です。

	
	
	<form enctype="multipart/form-data"
	action="mailto:mail@yokochin.com" method=post>
	送出ファイル: <input name="userfile" type="file">
	<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></head>
	<body>
	<h2>Thank you very much</h2>
	</body>
	</html>
	eof
	
	open(upld, "> /directory/file");
	print upld $buffer;
	close(upld);
	
	
ここで、HTML文書へ具体的な記述例をあげておきます。
	
	
	<form enctype="multipart/form-data"
	action="data/fileupload" method=post>
	送出ファイル: <input type="file" name="myfile"><p>
	<input type="submit" value="転送">
	</form>
	
	
送出ファイル:

まだ、MIME化されたままのファイルですが、これを綺麗に整形すれば望みの結果が得られると思います。また、MIME TYPEは複数のファイルを一度に転送できるようになっているので、INPUTタグを複数設定すれば複数のファイルを一度にMIMEエンコードしてアップロードできます。

	
	
	<form enctype="multipart/form-data"
	action="scripts/fileupload" method=post>
	送出ファイル1: <input type="file" name="myfile1"><p>
	送出ファイル2: <input type="file" name="myfile2"><p>
	<input type="submit" value="転送">
	</form>
	
	
送出ファイル1:

送出ファイル2:

次はSIMON Tneoh Chee-Boonの作ったファイルのアップロード・スクリプトです。

P2Pソフトウェア

CGIとは直接関係ありませんが、インターネット上でファイルのアップロード(やダウンロード)を行う方法の1つとして、「P2P」と呼ばれるファイル交換ソフトを利用する方法もあります。特定のサーバーは介さず、クライアント同士でファイルをアップロード(やダウンロード)が出来るという、非常に便利なソフトです。もっとも普及しているP2Pソフトウェアとしては、WinMXWinnyがあり、ご存じのように日本では著作権の侵害と係わる社会問題にまで発展しています。ただ、ソフト自体が非合法なわけではありません。

 
以下でご紹介するP2Pソフトウェアの場合、使用目的が著作権を侵害しないということがダウンロードの前提条件です。各「Source Code」ボタンをクリックされた後、「著作権を侵害しない場合のみ使用することに合意する」という確認のメッセージへ「OK」すれば、それが合意の証となります。
 

Winnyのインストール方法

次のボタンをクリックするとWinny2b.71のインストール・ファイルがダウンロードできます(他のバージョンは検索サイトで捜して下さい)。

ソースコードのダウンロード

  1. winy2b71.zip をたとえば「C:\Program Files\Winny2」といった新規のディレクトリへ展開します。
  2. 解凍したファイルの1つである「Noderef.txt」をメモ帳などで開き、次の初期ノード(つまり8行の文字列)をそのままコピーして保存します。
    	
    	
    	@bcce35409662d7425fd481e7f16d2db81dffee64c005bf122698f67ed4cb7163b0d851f16a1501aa3a77d6f17619e4
    	@99e3ddee9665ebda85fa65096af1801578e65e
    	@c9c7ac231d8ed713f76922d59b5e48985ea09e1b
    	@3f3a003a85d47a202679d7eca81bb0390a212b451d99
    	@91784dd1ed775d86d78b3c705326823403ff7a
    	@9e27479bc16bbf3d157532e5c83d922d3a6dd3
    	@f98f14dfb1fb3133a9841b9a97a7ec0439394eef03
    	@d1a4682a0e23609f825c0e00cc1be6cc4f4dda3f
    	
    	
    
  3. インターネットへの接続が確認できたら「winny.exe」を実行し、「検索単語」ボックスへ自分の欲しいファイル名を記入後、隣の「検索」ボタンをクリックします。
  4. 該当するファイルは、しばらく待つと下にリストアップされますから、ダウンロードしたいファイルがあればその名前を右クリックして開いたメニューの「ダウウンロードリストに追加(A)」を選択して下さい。
  5. あとは放っておいてもコンピュータが勝手にやってくれます。

以上の基本操作の他、右端の「設定」ボタンをクリックすれば通信から画面の色まで様々な設定を変更することも可能です。

WinMXのインストール方法

次のボタンをクリックするとWinMX3.31のインストール・ファイルがダウンロードできます(他のバージョンは検索サイトで捜して下さい)。

ソースコードのダウンロード

  1. こちらは自己解凍型のファイルですので、ダウンロードしたwinmx331.exeを実行すれば自動的にインストールが始まります。
  2. 途中の設定オプションは初期設定のままでかまいませんが、「Screen Name」のみ適当な名前を入力しなくてはなりません。
  3. インストールが終わったWinMXは、まずインターネットの接続をチェックし、問題がなければ「Connection Status」へ「Ready」と表示されます。
  4. あとはWinnyの場合と同じく「Search」を選択してその「Open New Search」ボックスへ自分の欲しいファイル名を記入後、「Search」ボタンをクリックするだけです。

 
WinMXを初期設定のままインストールした場合、ダウンロードとアップロード(共有ファイル)は同じフォルダを使用するため、ダウンロード中の不完全なファイルも配布されてしまいます。そのファイルが思い通りの内容であるとは限らず、もし非合法なものであれば犯罪行為ともなり、こうした問題が起こらないよう、ダウンロード・フォルダの設定はアップロード・フォルダと分けておくほうが安全です。
 

以上のP2Pソフトウェアは、とにかく使ってみると特別コンピュータの知識がなくても要領は把握できると思います。使用上、1つだけご注意いただきたいのは、ランダムに接触する相手が必ずしもウィルス対策を講じているとは限りません。したがって、まず自らのガードを固めておくことが不可欠です(コンピュータ・ウィルスも最近では「W32,HLLW.Antinny」のようなWinnyファイル共有ネットワークを介して感染を広げるワームさえ登場しています)。



Copyright (C) 1996-2003 by Yasukazu Yokoi. All Rights Reserved.