新規記事投稿 フォロー記事投稿 記事のキャンセル
From: にあ <nir@mxa.meshnet.or.jp>
Subject: Re: サーバへのファイルのアップロード
Date: 1997/03/17 21:13:38
Reference: mesh.program/00233

# さて、汚名返上と言うことで。(^^;;

3月17日に、いぇ〜い!さんは書きました。

>CGIを使って、でクライアント側にあるファイル(私はGIF、JPGファイルを考えてます
>が)を、サーバ側にアップロードする事はできるんでしょうか?
>
これはブラウザ依存 (と言うより、HTML3.2に取り入れられたので、HTML3.2準拠の
ブラウザならと言うことになるのでしょうが) なのですが、<FORM ...> の構文で
ファイルの内容を送る事が出来ます。

例えば、

<FORM ACTION="cgi-script.cgi" ENCTYPE="multipart/form-data" METHOD="POST">
送信するファイル: <INPUT TYPE="file" NAME="TestFile">
<INPUT TYPE="hidden" NAME="test" VALUE="abc"><BR>
<INPUT TYPE="submit">
</FORM>

と言うようなフォームでファイルを送信すると、cgi-script.cgi には、

CONTENT_TYPE = 'multipart/form-data; boundary=---------------------------26289989620002'

と言うような CONTENT_TYPE が渡され、標準入力にはフォームの内容がマルチパートで
入ってきます。(もちろん boundary の値はその時々で異なります)

例えばこの様な感じになります。

-----------------------------26289989620002
Content-Disposition: form-data; name="TestFile"; filename="ローカルでのファイル名"

ファイルの
内容が
入る...

-----------------------------26289989620002
Content-Disposition: form-data; name="test"

abc
-----------------------------26289989620002--

と言う具合ですね。

渡されたマルチパートのデータはCGIで処理しなければなりませんが、汎用のCGIライブラリの
中には、既にこの様なファイルアップロードによるマルチパートを処理できるものも多い様です。