ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

HTMLでファイルをアップロードする書き方と、そのとき、サーバーにどう送られているか?

2007-03-08 16:48:40 | JavaとWeb

HTMLでファイルをアップロードするには(今、受け手は、CGIとします)、
こんな風に書けばいい

<html>
<head><title>ファイル送信テスト</title></head>
<body>
<h1>ファイル送信テスト! </h1>
	<form action="http://127.0.0.1/cgi-bin/FileSend.cgi"
               method="post" enctype="multipart/form-data">
		<input name="file" type="file" size="50"><BR>
		<input name="zikko" type="submit" value="送る!">
	</form>
</body>
</html>

(上記< > ¥は、本当は半角です)

こう書くと、"http://127.0.0.1/cgi-bin/FileSend.cgi(ローカルホストのcgi置き場にあるFileSend.cgi)に、アップロードしたデータが渡される。




 では、そのアップロードしたデータは、どーいう形で送られるのか?

 上記CGI(FileSend.cgi)を、以下のように書くと、ブラウザに、送られてきた内容を、そのままかえす形になる。
#!c:/perl/bin/Perl.exe
use CGI;

#引数を取得
if ( $ENV{'REQUEST_METHOD'} eq "POST" )
{
	read (STDIN, $qs, $ENV{'CONTENT_LENGTH'});
}
else
{
	$qs = $ENV{'QUERY_STRING'};
}
$rsv = $qs;

#書き出し
print "Content-Type: text/plain¥n¥n";
print $rsv;
exit;

(上記< > ¥は、本当は半角です)




このとき、C:/temp/test.txtに、Hello World という言葉だけを入れたファイルをアップロードすると、こんなかんじでかえってくる。

-----------------------------7d7ab2c450266
Content-Disposition: form-data; name="file"; filename="C:¥temp¥test.txt"
Content-Type: text/plain

Hello World
-----------------------------7d7ab2c450266
Content-Disposition: form-data; name="zikko"

送る!
-----------------------------7d7ab2c450266--

(上記< > ¥は、本当は半角です)


つまり、普通の引数の入り方と違うので、よくCGIのサンプルプログラム
にある書き方ではできない。

どーするか。。




こーすると、できるみたい。

以下、ファイルの内容をブラウザに返すCGI(FileSend.cgi)
(ただし、テキストの場合のみ。他の場合には、もっと複雑あるよ)
#!c:/perl/bin/Perl.exe
use CGI;

# ファイル名の取得 
$query = new CGI; 
$filename = $query->param('file');

#ファイルを読み込む
$file = "";
while($bytesread = read($filename, $buffer,2048))
{ 
	$file .= $buffer; 
} 

#そのまま書き出す
print "Content-Type: text/plain¥n¥n";
print $file;
exit;

(上記< > ¥は、本当は半角です)

●参考にしたサイト
CGI.pmを使ったファイルのアップロードの簡単なサンプル
http://www.harukaze.net/~mishima/perl/module/upload_by_CGI_pm.html

ここに、もっと複雑な場合について、書いてあるよ!

P.S
あたりまえのことだけど、CGIプログラムでファイル名をうけとって、そのファイルを読み込んでいますが、これは、formで送られたデータの中にあるファイルの名前のこと。
(サーバー側にある同名のファイルが読めるわけではない)


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

フリーアドレス制におけるプレゼンス。

2007-03-08 10:33:44 | Weblog

 ちょっと、頭の体操。

 最近、フリーアドレス制がひろまっているらしい。。
 って、DHCPの話じゃなくって、リアルの世界の話。
 席がきまってなくって、あいているところ、好きに座っていいというもの。
 営業や実質人材派遣のソフトハウス(^^;)などの場合、会社にいるときが少ないので、席をきめてしまうと、がらーん、とむだなスペースが広がる。
 そー言う場合、このフリーアドレス制だと、会社をせまくできるので、べんりべんり。。




 。。。みんながあつまるときはどーすんだろー
 公民館でも借りるのかな(^^)

 でもこれ、電話は不便ですよね。
 内線のまわしようがない。。(座ってる場所がわかんないので)
 いっぱい電話がかかってくる、大きな会社だったら、声張り上げるわけにも行かないし。。
 どーすんだろー。。

 っていうのが、頭の体操のお題。





 ま、ケータイを使う。とくに、社内では内線(無線LAN)になるようなケータイを使う。
 でもそうすると、みんなケータイを持たないといけないよねえ。。
 (=ケータイの基本料金は、毎月かかるということ)
 社内中、無線LANが通じるようにしないといけないし。。。

 基本料金払いたくないからって、新しいケータイ端末を買ったら、
 購入費用もかかるけど、2つも持ち歩くの不便だし。。

 他にあるとしたら。。




 パソコンは、フリーアドレス制でも、席に対して1つはあるわけで(もしくは、自分のパソコンを使うのかもしれないけど)、そのパソコンにログインしたら、

  パソコン=今ログインしてる人

の関係は決まる。

 なので、全パソコンのログインしている人の関係が分かれば、それと電話を結ぶなり、Skypeと結ぶなりすればいい。。

 っていうか、ログインしたらメッセンジャーに必ずログインするようにして、そのメッセンジャーと電話を結べばいいのかな?

 ま、実際は、この問題、解決されてるんだろうけど(だから、フリーアドレス制が進展してるんだろうけど)。。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする