カレッヂ |
質問者 うし
投稿日 6/16(月) 11:14:05
お世話になります CGIperlで画像等をアップロードしたいと考えております CGI.pmなどを使うと簡単に?できそうなのですが、初めてのCGI なので、最初から自分で作ってみようと思っています さて、現在の状態ですが 自分のPC(Win98)にApacheをいれて、そこで実験をおこなっております print "<FORM METHOD=POST ENCTYPE=\"multipart/form-data\" ACTION=\"boardtest.cgi\">\n"; print "お名前:<INPUT TYPE=text NAME=FROM SIZE=54 VALUE=\"\"><br>\n"; print "<TEXTAREA ROWS=3 COLS=60 NAME=MESSAGE></TEXTAREA><br>\n"; print "<INPUT TYPE=file NAME=TENSOU><br>\n"; print "<INPUT TYPE=submit VALUE=\"送信\">\n"; print "</FORM>\n"; で情報を送信し read(STDIN, $buf, $ENV{'CONTENT_LENGTH'}); で受け取っています 45k程度のファイル(test.jpg)を送信したところ $ENV{'CONTENT_LENGTH'}のサイズが46k程度になりましたが length($buf)が1k程度になっております。 内容を確認したところtest.jpgが途中で切れているようです。 これについて、原因を教えていただけますでしょうか? なにぶん知識不足なもので申し訳ないのですが、なるべく具体的に お願い致します。 ・test.jpgでの送信を何度か行ないましたが、同じところで切れています。 ・別のファイル(test2.jpg)で送信を行ないましたが、同様に途中で切れています。 ・test.jpg時のlength($buf)とtest2.jpg時のlength($buf)はサイズが違っていました。 お忙しいところ恐れ入りますが よろしくお願い致します。
プロバイダ参照: |
回答者 まさ
[削除]
投稿日 6/16(月) 13:15:43
up.htmlの中身 ------------------------------------------------------ <HTML> <HEAD> <TITILE>ファイルのアップロード</TITLE> </HEAD> <BODY> <h2>ファイルのアップロード</h2> <FORM ACTION="up.cgi" ENCTYPE="multipart/form-data" METHOD="POST"><P> ファイル: <INPUT TYPE="file" NAME="TENSOU" SIZE="32"><BR> <INPUT TYPE="submit" VALUE="送信"> </FORM> </BODY> </HTML> up.cgiの中身 ------------------------------------------------------ #!/usr/local/bin/perl $BUFSIZE = 2048; use CGI; $q = new CGI; $filename = $q->param('TENSOU'); while(read($filename, $buffer, $BUFSIZE)) { $file .= $buffer; $file_size ++; } $file_size *= ($BUFSIZE / 1024); open(OUT, "> test.jpg"); print(OUT $file); close(OUT); print "Content-type: text/html\n\n"; print "$file_size(KB)<br>\n"; print "<a href=\"test.jpg\">テスト</a>\n"; exit; 一応これで正常に動くことを動作確認しました。 あとは適当に変更してみて下さい。 |
質問者 うし
[削除]
投稿日 6/16(月) 13:27:40
まさ様 ご回答大変ありがとうございます。 検証までして頂いて恐縮しております。 わかりにくかったようで申し訳ありません。 現在はCGI.pmを使わずに作成しています。 また、できれば使いたくないと考えています。 理由はCGI.pm(の一部分)がどのようなことをしているのかを納得した上で使いたい。 また、現在勉強中なのでなるべく自分自身で作ってみたい。 です。 read(STDIN, $buf, $ENV{'CONTENT_LENGTH'}); を行なったときに、$bufにはメールのような形式のデータがはいってきます。 区切り文字(-------?????等)をつかって情報を分割し処理しようとおもっています。 以前の例で行きますと、$bufには送付された全ての情報が入っているべきだと思うのですが 実際には入っていないようです。 それは、私のデータ取得方法に間違いがあるのでしょうか? せっかくご回答頂いたのに覆してしまうようで心苦しいのですが、 何卒ご回答よろしくお願い致します。 ご回答いただいた内容は理解致しました。 大変ありがとうございます。 |
質問者 うし
[削除]
投稿日 6/16(月) 14:40:37
ご回答ありがとうございます。 無理を言って申し訳ありません。 サーチエンジンなどではいろいろ調べました。 どうしてもわからなかったので、こちらにご相談させていただいたのですが、 かなりむずかしいことのようですね。 ご紹介のあったcgi-lib.plも一度見てはいるのですが、書いてある内容が わたしにとってはとてもむずかしかったため、理解できなかったのです。 もう一度cgi-lib.plを確認してわからないようでしたら CGI.pmをつかってお教え頂いた方法を使いたいと思います。 いろいろとありがとうございました。 |
このページは終了したので返信(回答)は書きこめません
Web裏技 |