複数ファイルのアップロードプログラムを作成する予定です。
HTMLのフォームにINPUTタグ(type:FILE)を複数作成し、その
対象ファイルを一度にアップロードさせたいと思考中です。
CGI(C言語)で複数ファイルを取得して、ファイルを保管する方法
を教えていただけませんでしょうか。
また、標準入力の中身がどのような構成で送られてセットされている
のかのしくみもできれば教えてください。
Sampleがあれば大変助かります。
よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

このページをご覧ください。


改変自由なCGI側のサンプルもあります。

参考URL:http://wakusei.cplaza.ne.jp/twn/wwwxx034.htm
    • good
    • 0
この回答へのお礼

出来れば、C言語のソースが良かったのですが、
部分的にヘッダーの内容が分かるので助かります。
がんばって作成します。
ありがとうございました。

お礼日時:2001/01/30 19:22

このQ&Aに関連する人気のQ&A

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

このQ&Aと関連する良く見られている質問

Q複数サーバを使ってのアップロードで...

アップロードCGIを作りたいと考えています。

ファイルの拡張子によってアップするサーバを変更することは可能なのでしょうか?
例えば、

(1)拡張子「lzh」のファイルは http://www.aa*.com/ にアップする
(2)拡張子「zip」のファイルは http://www.bb*.com/ にアップする

同時に複数アップロードさせたいため、アップする人にサーバを選ばせるのではなく、こちら側で振り分ければと考えております。

なにとぞ ご教授宜しくお願い致しますm(__)m

Aベストアンサー

[ファイルを保存するCGI]の前段階で、[振り分けるCGI]が別に必要ですね。
[振り分けるCGI]がPOST送信・またはFTP送信で[ファイルを保存するCGI]に
接続すれば可能だとは思いますが、かなり複雑な仕組みになりますよ。

Q に対応している携帯電話の機種は?

こんにちは。
フォームタグでファイルをアップするための
<INPUT type="file">ですが、これに対応しているiモードの機種、J-skyの機種をご存知の方ぜひ教えてください。
また、どこかに掲載されているという情報でも結構です。
宜しくお願いします。

Aベストアンサー

J-T51で出来ましたよ。

<INPUT type="file">を使ったHTMLページを自分で作ってJ-T51でアクセスすると、ちゃんと入力欄と参照ボタンが表示されました。
参照ボタンを押すと、「データフォルダ」と「クリップボード」の選択になり、「データフォルダ」から更に「ピクチャー」「etc」の選択が出ます。
ピクチャーで画像ファイルを選択すると、選択したファイル名が入力欄に入力されました。

また、J-SH08で同じテストをしたら、入力欄だけで参照ボタンが表示されませんでした。

テストにはただのHTMLしか使用していないので、ここから先のファイルをアップしたりする部分はテストしてません。
ファイル選択後の動作も実装していて、J-PHONEでアクセス可能なサイトのURLを教えていただければ、テストしてみますよ。

最近は携帯上で画像ファイル(GIF)やJAVAファイル(JAR? CLASS?)などを扱っているので、携帯でファイルという考え方が無いはずはありません。
今後発売される最新機種であれば<INPUT type="file">をサポートするようになるんじゃないでしょうか?(私見)

J-T51で出来ましたよ。

<INPUT type="file">を使ったHTMLページを自分で作ってJ-T51でアクセスすると、ちゃんと入力欄と参照ボタンが表示されました。
参照ボタンを押すと、「データフォルダ」と「クリップボード」の選択になり、「データフォルダ」から更に「ピクチャー」「etc」の選択が出ます。
ピクチャーで画像ファイルを選択すると、選択したファイル名が入力欄に入力されました。

また、J-SH08で同じテストをしたら、入力欄だけで参照ボタンが表示されませんでした。

テストにはただのHTMLしか...続きを読む

Qファイルのアップロードとログ

今日はいつもお世話になっています。

ファイルをアップロードをする際についでにログに名前やアドレス、ファイル名をログに
保存したいなと思っているのですが、なかなかうまくいきません・・・

ファイルをアップロードすることは出来たのですがほかの内容をうまくCGIに渡せなくって
困っています。

どうか宜しくお願いいたします。

use lib './lib';
use CGI_Lite;
require 'lib/util.pl';
require 'pl/cgi-lib.pl';
require 'pl/jcode.pl';

$Title = 'ファイルのアップロード サンプル';
$Temp = 'tmp'; $Platform = 'Unix'; $BUFSZ = 2048; $CharSet = 'Shift_JIS';

$upload = new CGI_Lite;

$upload->set_directory($Temp) or exitError(" $Temp がオープンできません。");
$upload->set_platform($Platform);
$upload->set_buffer_size ($BUFSZ);
$filename = $upload->filter_filename(\&convName);

$upload->close_all_files;

%data = $upload->parse_form_data;

if ($upload->is_error()) { exitError($upload->get_error_message());}

&ReadParse( *answer );

$num = $answer{'num'}
$nam = $answer{'nam'};
$mai = $answer{'mai'};
$file = $answer{'file'};

print <<"EOL";

<HTML><HEAD><TITLE></TITLE></HEAD>
<BODY>
整理番号  :$num<br>
名前    :$nam<br>
アドレス  :$mai<br>
添付ファイル:$file<br>
</BODY>
</HTML>
EOL
exit(0);

今日はいつもお世話になっています。

ファイルをアップロードをする際についでにログに名前やアドレス、ファイル名をログに
保存したいなと思っているのですが、なかなかうまくいきません・・・

ファイルをアップロードすることは出来たのですがほかの内容をうまくCGIに渡せなくって
困っています。

どうか宜しくお願いいたします。

use lib './lib';
use CGI_Lite;
require 'lib/util.pl';
require 'pl/cgi-lib.pl';
require 'pl/jcode.pl';

$Title = 'ファイルのアップロード サンプル';
...続きを読む

Aベストアンサー

use CGI_Lite; と require 'pl/cgi-lib.pl'; は同時に使えません。$upload->parse_form_data に入力データは全て食われてしまいます。

%answerではなく、%data の方にお求めのデータは全て入っていると思いますが、いかがでしょう?

QCGI によるファイルのアップロード

こんにちは。Perl初心者です。
ファイルのアップロードのプログラムを作ったのですが(と言っても書籍の丸写しですが..)サーバー上でエラーになってしまいます。どこが間違っているか教えて下さい。
環境:@niftyのホームページ(CGIは許可されています。), PC: Windows XP

ソース:
#!/usr/local/bin/perl

use CGI qw(:standard);

$file1 = param('file1');

open OUT, "> $file1";
while(<$file1>){
  print OUT $_;
}
close OUT;

$file2 = param('file2');

open OUT, "> $file2";
while(<$file2>){
  print OUT $_;
}
close OUT;

print <<"EOL";
Content-type: text/html

<html>
<body>
Files have been uploaded.<br>
$file1<br>
$file2<br>
</body>
</html>

EOL

exit;

こんにちは。Perl初心者です。
ファイルのアップロードのプログラムを作ったのですが(と言っても書籍の丸写しですが..)サーバー上でエラーになってしまいます。どこが間違っているか教えて下さい。
環境:@niftyのホームページ(CGIは許可されています。), PC: Windows XP

ソース:
#!/usr/local/bin/perl

use CGI qw(:standard);

$file1 = param('file1');

open OUT, "> $file1";
while(<$file1>){
  print OUT $_;
}
close OUT;

$file2 = param('file2');

open OUT, "> $file2";
...続きを読む

Aベストアンサー

・とりあえず、冒頭に
use CGI::Carp qw(fatalsToBrowser);
と書くことを勧めます。これを書いておくとブラウザ上にエラーの内容が表示されます。

・ファイルをopenする時に、openが成功したかどうかを捕捉するようにした方がいいです。
or die "cannot write $file : $!";
これを書いておけばopenが成功しているかどうか確認できます。(Permissionの設定でエラーを起こしていることが多々あります。)

・HTMLにenctypeを指定していますか?(アップロードする時のみ、指定する必要があります)
enctype="multipart/form-data"

上を踏まえて、少し書き直したのが下になります。
CGI
#!/usr/local/bin/perl

use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);

my $file = param('file');
my $fh = upload('file');

open OUT, '>', $file or die "cannot write $file : $!";
while(<$fh>){
print OUT $_;
}
close OUT;

print <<"EOL";
Content-type: text/html

<html>
<body>
Files have been uploaded.<br>
$file<br>
</body>
</html>

EOL

exit;


HTML
<html>
<body>
<form name="form1" enctype="multipart/form-data" method="post" action="test.cgi">
<input type="file" name="file" />
<input type="submit" name="Submit" value="送信" />
</form>
</body>
</html>

・とりあえず、冒頭に
use CGI::Carp qw(fatalsToBrowser);
と書くことを勧めます。これを書いておくとブラウザ上にエラーの内容が表示されます。

・ファイルをopenする時に、openが成功したかどうかを捕捉するようにした方がいいです。
or die "cannot write $file : $!";
これを書いておけばopenが成功しているかどうか確認できます。(Permissionの設定でエラーを起こしていることが多々あります。)

・HTMLにenctypeを指定していますか?(アップロードする時のみ、指定する必要があります)
encty...続きを読む

Qform ファイルアップロードを プログラムで再現

html + CGI などで、
form を使いパソコン内のファイルをサーバーなどにアップロードできますが、
その際、HTMLなどの form からではなく、
独自に作ったプログラムから form と同様のリクエストを送り、
サーバー上にファイルをアップロードしたいのですが、
どのようにすればよいのでしょうか?

独自のプログラムは、本来のformがあるページとは違うドメイン
もしくはローカルパソコンから実行するものとします。
言語は何でもかまいません。

Aベストアンサー

#!/usr/bin/perl
use strict;
use warnings;
use LWP;
use HTTP::Response;
use HTTP::Request;
use HTTP::Request::Common;

use constant UPLOAD_CGI => 'http://localhost/cgi-perl/CGI.pm/upload.cgi';
use constant REFERER => 'http://localhost/';

my $file = 'upload_file';
my $ua = LWP::UserAgent->new;
$ua->agent('Mozilla/5.0');
$ua->timeout(10);

my $req = POST(
UPLOAD_CGI,
Content_Type => 'form-data',
Content => [
upload_file => [$file],
submit => 'Upload'
],
Referer => REFERER
);

my $res = $ua->request($req);
$res->is_success or die UPLOAD_CGI, ": ", $res->message, "\n";

#!/usr/bin/perl
use strict;
use warnings;
use LWP;
use HTTP::Response;
use HTTP::Request;
use HTTP::Request::Common;

use constant UPLOAD_CGI => 'http://localhost/cgi-perl/CGI.pm/upload.cgi';
use constant REFERER => 'http://localhost/';

my $file = 'upload_file';
my $ua = LWP::UserAgent->new;
$ua->agent('Mozilla/5.0');
$ua->timeout(10);

my $req = POST(
UPLOAD_CGI,
Content_Type => 'form-data',
Content => [
upload_file => [$file]...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報