電子書籍の厳選無料作品が豊富!

<INPUT TYPE="file">で指定されたファイルをサーバーにアップロードする方法をさがしています。
CGIの記述言語はPerl、転送を行うファイルは画像ファイルです。

送られてきたデータを確認したところユーザー側のファイルへのフルパスなのは確認できましたが、そこからアップロードする方法が分かりません。

パールライブラリ(.plか.pm)でファイル転送を行う良いライブラリがあれば教えてください。

また、転送の方法を教えてください。

A 回答 (3件)

>1,


>-----------------------------7d431c1420724
>この文字列は何を表しているのでしょうか?

formタグでenctype="multipart/form-data"と指定しているので送信データはマルチパートになります。
「-----------------------------7d431c1420724」はパートの区切りを表すバウンダリ文字列です。

>2,
>jpegなどの画像を送信したときには、バイナリデータが送られてきました。それをそのまま保存すれば元の画像になるのでしょうか?

そうです。

>3,
>type="text"も同時に送信してみましたが、通常と違い、%nnにエンコードされずに日本語がそのまま送信されてきました。
>これを通常の%nnで送信されるようにするのは不可能なのでしょうか?

Perlの知識に乏しいので%nnというのがわからないのですが、マルチパート指定で送信するデータをエンコードするのはできないように思います。

ANo.1の回答でも書きましたが、詳細については自分で調べることをお勧めします。
    • good
    • 0

cgi-lib.pl を使えば、あまり悩むことなく取得出来るでしょう。


cgi-lib.plでは、送信量制限があり、2^17=131072以内です。
cgi-lib.plが読めれば、自分でこの制限を書き換えることは可能です。
受け取りコードは、
&ReadParse();
### %in=data; %incfn=filename; %inct=filetype
$filetype =$inct{'file_tag_name'};
$filename =$incfn{'file_tag_name'};
$filedata= $in{'file_tag_name'};

参考URL:http://cgi-lib.berkeley.edu/
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ファイルのUpは、標準モジュールである、CGI.pmを使用する事にしました。
cgi-lib.plはライブラリであるため、危険性があるとの記述を発見しましたし、それにPerlではモジュールの使用を推奨しているためです。
ファイルのUpや、値の操作をしてくれるライブラリがあることを教えてくれたことに感謝します。

お礼日時:2005/08/16 17:37

たぶんformのenctypeを指定していないと思うのでmultipart/form-dataを指定


してください。ファイルデータがサーバに送られるようになるはずです。

<form action="hoge.cgi" method="post" enctype="multipart/form-data">
<input type="file">
</form>

Perlでの処理は自分で検索してください。ありふれた処理なのでサンプルコードは
すぐに見つかるはずです。

この回答への補足

いままでは、
read(STDIN, $str, $ENV{'CONTENT_LENGTH'});
で、読み込んでいたのですが、これだと読み込めたデータは

-----------------------------7d431c1420724

になりました。

そこで、perlの%requestから判断して
while(<STDIN>){$str .= $_;}
に変更したところ、

-----------------------------7d431c1420724
Content-Disposition: form-data; name="filedata"; filename="C:\Documents and Settings\subject\My Documents\text\test1.txt"
Content-Type: text/plain

This is test data.
[crlf]format is text
テストです。
ここに改行があります。
-----------------------------7d431c1420724
Content-Disposition: form-data; name="chtext"

test日本語
-----------------------------7d431c1420724--

このようになりました。
補足要求ですが、

1,
-----------------------------7d431c1420724
この文字列は何を表しているのでしょうか?

2,
jpegなどの画像を送信したときには、バイナリデータが送られてきました。それをそのまま保存すれば元の画像になるのでしょうか?

3,
type="text"も同時に送信してみましたが、通常と違い、%nnにエンコードされずに日本語がそのまま送信されてきました。
これを通常の%nnで送信されるようにするのは不可能なのでしょうか?

補足日時:2004/12/05 17:28
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!