こんにちは。
ホームページのフォームからユーザーにファイル(画像ファイルなど)をサーバー上にアップロードしてもらうにはどのような方法がありますか?初心者なのでよくわからないんですが・・・簡単な事ですか?

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

A 回答 (2件)

モジュールやひとさまのプログラムを利用せず自前ですべてやると


なると結構たいへんかもしれません。でも、標準的なCGIサポート用
モジュールCGI.pmを使うと比較的簡単です。まあこれを使うなら
全部これに合わせてCGI全体も書いたほうがいいんですが…

細い解説は置いておいて、ざっとこんなもんだよ、というのを
perldoc CGIから引用しておきますと(ちょっと手を加えましたが)、
以下みたいな感じです。
[フォーム作成]

print $query->filefield(-name=>'uploaded_file',
-default=>'starting value',
-size=>50,
-maxlength=>80);

[画像データ受取り]
$fh = $query->upload('uploaded_file');

open (OUTFILE,">>/usr/local/web/users/feedback");
while ($bytesread=read($fh,$buffer,1024)) {
print OUTFILE $buffer;
}

詳しくはドキュメントをどうぞ。
    • good
    • 0

う~ん、taisouさんがどのくらいの「初心者」なのかわからないんですが…。


Perlプログラミングの経験はおありですか? それ以外の言語は? HTMLは?
とりあえず、既存のCGIソースを見て勉強するか、あるいはそのソースをそのまま使わせてもらっちゃうか、ですね。
とりあえず、使用フリーの画像アップローダの一例です。(参考URL)

参考URL:http://www.t-okada.com/cgi/sh_diarys3/261.html

この回答への補足

早速のご返事ありがとうございます。
初心者と言いましたが、それなりに経験はあります。
HTMLは書けますし、Perlでも一般的に出されているCGIの
入門書に書かれているくらいのプログラミングは出来ます。ただ、始めてからあまり年月を重ねていないのと、ホントに我流で、あまり自信がなかったんで・・。
画像のアップロードはやったことがないのと、何冊か参考書見たんですが、書いてないようなので困ってたんです。
とりあえず、教えていただいたURLへ行ってみます。
ありがとうございました。また教えて下さい。

補足日時:2001/05/14 20:09
    • good
    • 0

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

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

Q簡単なファイルアップロード

perl のスクリプトの勉強に、ファイルアップロードのごくごく簡単なスクリプトを探してます。
CGIの仕組みを理解するくらい簡単なのでいいので、よろしくお願いします。

Aベストアンサー

http://www.gac.jp/article/index.php?stats=question&command=msg&category=12&id=12370

↑上記掲示板のレス004をご覧あれ。
ファイルアップロードの部分だけですので。
(ちなみに投稿者「Iwa」というのは私です)

参考URL:http://www.gac.jp/article/index.php?stats=question&command=msg&category=12&id=12370

Qフォームからアップロードされた画像ファイルの処理

フォームからアップロードされてきた画像ファイルを、適当なファイル名を付けてJPGあるいはGIFの拡張子で保存し、HTMLファイルで保存した画像を一覧表示させようというCGIスクリプトを作りたいと考えています。

質問1
<FORM action="xxxx.cgi" method="post" enctype="multipart/form-data">
<INPUT type="file" name="gazo">
<INPUT type="submit">
</FORM>
とこんな具合のフォームから画像ファイル(JPGやGIF)をアップロードした時、
受け手のxxxx.cgiでは、この画像ファイルのデータをどのように受けたらよいのでしょうか?
read(STDIN,$_,$ENV{'CONTENT_LENGTH'});としたり、
あるいは
cgi-lib.plを読み込んで、$in{'gazo'}
というような形で画像ファイルのデータを受け取ればよいのでしょうか?

質問2
画像ファイルを受け取ったとして、フォームから送られてきた画像ファイルがJPGなのかGIFなのかを判別することは可能でしょうか?
可能ならば、判別するためのスクリプトはどんなものが考えられるでしょうか?
(フォームから送られてくる画像ファイルのデータの何をチェックすれば、JPGかGIFかを判別できるのでしょうか?)

もしご回答頂ける方がおられればご教授ください。よろしくお願いします。
なお、「既存のスクリプトを利用しなさい」というような回答やアドバイスならば不要でございます。

フォームからアップロードされてきた画像ファイルを、適当なファイル名を付けてJPGあるいはGIFの拡張子で保存し、HTMLファイルで保存した画像を一覧表示させようというCGIスクリプトを作りたいと考えています。

質問1
<FORM action="xxxx.cgi" method="post" enctype="multipart/form-data">
<INPUT type="file" name="gazo">
<INPUT type="submit">
</FORM>
とこんな具合のフォームから画像ファイル(JPGやGIF)をアップロードした時、
受け手のxxxx.cgiでは、この画像ファイルのデータをどのように受...続きを読む

Aベストアンサー

判別はGIFならファイルの先頭が「GIF89a」または「GIF87」になっています。
jpegでは多分ですが、ファイルの先頭から7Byte目から「JFIF」となっているはずです。

ただし、Macintoshで作成されたデータの場合は先頭に128Byte余計なデータ(リソースフォーク)が付いている場合があるので、その際は先頭128Byteを読み飛ばしてから比較してください。

お手持ちの画像を適当なバイナリエディタで開いてご確認ください。

Qoffice2007形式のファイルをアップロードすると.zipになる

office2007形式のファイルをアップロードすると.zipになる
HP作成途中で色々調べたのですが、1人では解決できない問題がありましたので、
質問させていただきます

1)office2007形式のファイル(.docx/.xlsx/.pptx)をアップロードすると、
 ダウンロード時.zip形式の圧縮ファイルになってしまい、保存時手動で直さなくては
 いけないのを、プログラムで自動化できないか

2)現在のプログラムでは、ファイル名に日本語が入っていると、アップロードはできるが
 ダウンロードができないので、解決法はないか

以上の2点です。必要であればソースも載せますので、よろしくお願いします。

Aベストアンサー

状況が正確に分からないのですが、

まず2007形式の実体はZipファイルです。
拡張子をzipに変えてみて、7-Zipなどで開いてい見ると、
XMLファイルなどが詰まっているのが確認できると思います。

で、いまの現象はzipファイルだと自動判別されて、zipになっているのでは? と想像します。
その場合はシステムのmimetypeでoffice形式を宣言してあげることなどの改修が必要かと思います。

もう1つなんでもzipファイルにしてしまうシステムでしたらそれそのものを直すしかないです。

2番はURLエンコード/デコードのルーチンを入れるなどが必要です。

QPerlで、アップロードしたファイルの改ざんを発見する

こんばんは、初心者なので困っています。
Perlで以下のような物を作成しろと言われました。

「サーバにアップロードされたバイナリファイルを、アップ後に、改ざんされたかどうか判るように、そのファイルについてのデータベースを作りなさい。
そのデータというのは、ファイルを数分割して、それぞれの頭の数字の合計の事で、それを保管しておけば改ざんされた時にはその数字が変わっているので発見できる」
という事でした。

この様な事は可能なのでしょうか?
可能でしたら、見当が付かないので参考になるHPなどはありませんでしょうか?
よろしくお願いします。

Aベストアンサー

チェックサムですね。
ファイルをバイナリモードでオープンして、適当な間隔(例えば256バイト)でseekしてその数値を足し込んでいけばよいでしょう。

改竄されたかどうかは確率的なもので、発見できない場合もあると思いますが、良くある手段ではないでしょうか。

Qファイルがアップロードされずファイルパスが表示される

$upfile = $param{'upfile'};

# マックバイナリ対策
if ($macbin) {
$length = substr($upfile,83,4);
$length = unpack("%N",$length);
$upfile = substr($upfile,128,$length);
}

# 添付データを書き込み
$imgfile = "$ImgDir$mynum$tail";
if (!open(OUT,"> $imgfile")) {
if ($clip_err) { &check_ok; }
}
binmode(OUT);
binmode(STDOUT);
print OUT $upfile;
close(OUT);

chmod(0666,$imgfile);

全体像を示せなくてすみません。$tailは拡張子。
画像ファイルアップロードつき掲示板を作成しています。
惜しいところまでたどり着きました。

「添付」ファイル(画像)をアップロードすると
フォルダーの中にコンピュータのファイルパスが記述された
だけになります。↓
C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Sunset.jpg

なぜ画像がアップロードされないのでしょうか?
画像のファイルパスがアップされます。

$paramのところが&Readparseを使って$inでないとダメなんで
しょうか?&Readparseは呼び出しておりません。

元にした上手く画像がアップされるのは&Readparseで$inを
変数として使用しております。
しかし、いままで$paramでやってきてすべて$inに変えると
違うところがエラーが起こりそうです。

require "./jcode.pl";
require "./cgi-lib.pl";

を記述しています。

なにかヒントになることがあれば教えて頂きたいです。
よろしくお願いします。

$upfile = $param{'upfile'};

# マックバイナリ対策
if ($macbin) {
$length = substr($upfile,83,4);
$length = unpack("%N",$length);
$upfile = substr($upfile,128,$length);
}

# 添付データを書き込み
$imgfile = "$ImgDir$mynum$tail";
if (!open(OUT,"> $imgfile")) {
if ($clip_err) { &check_ok; }
}
binmode(OUT);
binmode(STDOUT);
print OUT $upfile;
close(OUT);

chmod(0666,$imgfile);

全体像を示せなくてすみません。$tailは拡張子。
画像ファイルアップロードつき掲示...続きを読む

Aベストアンサー

その, 記述された「画像のファイルパス」が正しいものであれば, 「ファイルの中身」を書き込まなければならないってことを忘れた?


おすすめ情報