![]() |
| カレッヂ |
質問者 うし
投稿日 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裏技 |