テキストと画像を回答するHTMLで書かれたアンケートがあります。回答は、
<form name="a" method="post" action="cgitest.cgi" enctype="multipart/form-data">
つまり、POSTメソッド、multipart/form-dataモードで cgitest.cgi に回答を送ります。
perlで作成したCGIでテキストは正しく受信できましたが、画像がファイルの中身ではなくファイル名になってしまいます。画像ファイルを受信する方法を教えてください。
なお、CGIには、画像ファイルのバイナリデータも送信されていることは、別途C言語で記載した確認プログラムで確認済みです。
----HTML----
<!DOCTYPE html>
<html lang="ja-JP">
<head>
<meta charset=Shift_JIS>
</head>
<body>
<form name="a" method="post" action="cgitest.cgi" enctype="multipart/form-data">
氏名 : <input type="text" name="ans1">
困ったときの写真:<input type=file name="ansfig1" onChange="this.form.disp.src=window.URL.createObjectURL(this.files[0])">
<br><img name=disp>
<input type="submit" value=" 送信 ">
<input type="reset" value=" 取消 ">
</form>
</body>
</html>
----CGI-----
#!"D:\lib\xampp\perl\bin\perl.exe"
use CGI;
my $q = new CGI;
#フォームからのデータ読み込み
my $ans1 = $q->param('ans1');
my $fig1 = $q->param('ansfig1');
$ans1file = 'ans1.txt';
open(OUT, ">$ans1file") or die "$!";
print OUT $ans1;
$ans2file = 'ans2.jpg';
open(OUT, ">$ans2file") or die "$!";
print OUT $fig1;
---- 参考 CGIに渡されるデータ確認用 ---------
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
int main(void)
{
int c;
FILE *fp;
fp = fopen("temp.dat","wb");
setmode(fileno(stdin), O_BINARY);
while((c=fgetc(stdin)) != EOF ) {
fputc(c,fp);
}
fclose(fp);
return 0;
}
No.1ベストアンサー
- 回答日時:
CGI.pmのマニュアルに書いてあると思います。
http://search.cpan.org/dist/CGI/lib/CGI.pm#Proce …
和訳:
http://perldoc.jp/docs/modules/CGI-3.49/CGI.pod# …
CGI.pmはアップロードされたファイルを一時的にファイルに保存し、$q->uploadでそのファイルのハンドルを取れるようにするようです。
回答ありがとうございます。
my $fig = $q->param('ansfig');
では、ファイルの中身ではなくファイル名が取得されるのですね。
>$q->uploadでそのファイルのハンドルを取れるようにするようです。
ファイルの中身を取得するには、ファイルアップロード用の IO::Handle 互換のハンドルを
$lightweight_fh = $q->upload('ansfig');
my $io_handle = $lightweight_fh->handle;
で取得して、
$bytesread = $io_handle->read($buffer,1024)
で1024バイト単位にファイルの中身を取得する
ということですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・ことしの初夢、何だった?
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで集計したい。
-
フォームを再送信しますか?
-
apacheでPerl CGIが作動せず、5...
-
入力フォーム(電話番号)
-
チェックボックスでのvalue値の...
-
/bin/awk '{print $5}'ってどう...
-
RARファイルのパスワードを忘れ...
-
皆さんはGUCCIはハイブランドだ...
-
cgi-binのエラー?
-
Trees掲示板CGI(CGI-Resque氏...
-
めちゃきれい
-
number 改行が追加できない
-
生成AI画像について
-
3DCG
-
ホームページにメールフォーム...
-
cgi アクセス制限 エラー
-
CGIの記述について教えてくださ...
-
CGIの設置が分かりません・・・
-
ホームページにCGIを設置したの...
-
ホームページにCGIを設置したの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
(Perl)ReadParseによるハッシ...
-
perlで自動ログインをしたいが...
-
自動ジャンプについて
-
フォーム入力後の確認画面表示...
-
さくらインターネットのCGI...
-
cgi-libを使って変数値渡しをし...
-
Javascriptの変数をCGIに送る方法
-
Rubyのmechanizeを利用したファ...
-
VBAでIEを操作submit処理について
-
SUN BBSの改造方法
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
掲示板(kentさんの所のsunbbs...
-
チェックボックスの返す値
-
WEBページを強制的に横画面で見...
-
[HTML]プルダウンメニューの横...
-
「value」に2つの値をセットす...
-
チェックボックスとセレクトボ...
-
INPUT TYPE
-
select値をhiddenのvalueに渡し...
おすすめ情報