プロが教えるわが家の防犯対策術!

初めて質問させて頂きます。仕事上で必要になってCGIを勉強しはじめたばかりのプログラミング初心者です。
ウェブ上でJPEGのサムネイルをクリックするとTIFF画像をダウンロードするシステムを作りたいのですが、TIFFファイルにリンクを張っても、QuickTimeで開いてしまうので困っています。いろいろ調べても、要領を得ません。
何とか圧縮ファイルにせずにTIFF形式のままダウンロードする方法は無いでしょうか。ご教授願います。

A 回答 (5件)

> nipotanさんの回答をコピー&ペーストしてやってみたんですが、Software errorが出てしまうのですが、ローカルだからということでしょうか?それとも他に設定し足りないところがあるのでしょうか?



おっと。コメントをよく読んでくださいね。

> 404 Not Found. at D:\HomePage\cgi-bin\tiff.cgi line 8.

は、8 行目 (my $size = (-s $tiff_file) || die '404 Not Found.'; の箇所) から、ファイルが存在しなかった場合 (あるいはファイルが 0 バイトだった場合) に発せられるエラーメッセージになっています。

で、コメント云々ですが、
---
# 画像のパス
my $image_path = '/usr/local/apache/htdocs/images';
---
ここを適宜、お手元の環境に合わせて設定してください。
相対パスでも、絶対パスでもかまいません。

/usr/local/apache/htdocs/
ってのは、一般的に UNIX に Apache をインストールした際にデフォルトで設定されるディレクトリなので、"AN HTTPD1.41d" のような、Windows 環境下のものであれば、この指定は適しません。
私は AN HTTPD ははるか昔に使っていた事がある程度なので全然知識がないですが、例えば、D:\HomePage\tiff_images というフォルダにある tiff 画像をダウンロードさせるためには

my $image_path = 'D:/HomePage/tiff_images';

のように指定すれば大丈夫かも知れません。
「かも」というのは、スラッシュでディレクトリの区切りをするのは、ActivePerl 的には OK なんですが、Microsoft IIS サーバあたりではコケた気がします。で、An HTTPD がどうだったかわからないのでなんともいえません。まずは、こんな感じの設定でお試し下さい。
    • good
    • 0
この回答へのお礼

随分とかかってしまいましたが、
何とか解決しました。
nipotanさん、本当にありがとうございました。
また、相談することもあると思うので
その時は、またよろしくお願いします。

お礼日時:2002/10/31 08:37

CGIでは有りませんが。



サムネイル上で右クリック→対象をファイルに保存
をするとリンク先が直接DLできますよ。
サムネイルの下にでも上記の但し書きを添えるのが一番簡単ではないでしょうか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
確かに、この方法が一番簡単でプラットホームにも左右されない方法なんですが、
やはり初心者(初級者ではなく)の方を想定した場合、
右クリックの時点で混乱される方もいらっしゃいますので、
やはり、「クリック」のみで対処できる方法を探したいと思っています。
こちらの説明不足で、お手間を取らせました。
申し訳ございません。

お礼日時:2002/10/23 19:53

失敬、



my $path_info =~ s|^/(.+?)|$1|;

の箇所は、

my $path_info = $ENV{PATH_INFO};
$path_info =~ s|^/(.+?)|$1|;

にしてください。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
書くのを忘れていたんですが、CGIはPerlです。
ローカルに仮想サーバーを立てた状態で作業をしています。
ActivePerl5.6.1とAN HTTPD1.41dをつかっています。
で、TIFFファイルを開かずにローカルに保存させる方法を探しています。
nipotanさんの回答をコピー&ペーストしてやってみたんですが、Software errorが出てしまうのですが、ローカルだからということでしょうか?それとも他に設定し足りないところがあるのでしょうか?
ソースは以下のとおりです。

use CGI::Carp 'fatalsToBrowser';
use constant CRLF => "\x0d\x0a";

my $image_path = '/usr/local/apache/htdocs/images';
my $path_info = $ENV{PATH_INFO};
$path_info =~ s|^/(.+?)|$1|;
my $tiff_file = $image_path.'/'.$path_info;
my $size = (-s $tiff_file) || die '404 Not Found.';
open(FH, $tiff_file) || die $!;
binmode FH;
binmode STDOUT;

print 'Conten-length: '.$size.CRLF,
'Accept-ranges: byte'.CRLF,
'Content-Disposition: inline; filename="'.$path_info.'"'.CRLF,
'Content-Type: application/octet-stream'.CRLF.CRLF;

my $buffer;
print $buffer while(read(FH, $buffer, 1024));

close FH;

で、エラーメッセージが以下です。

Software error:
404 Not Found. at D:\HomePage\cgi-bin\tiff.cgi line 8.

For help, please send mail to this site's webmaster, giving this error message and the time and date of the error. [Wed Oct 23 19:38:42 2002] D:\HomePage\cgi-bin\tiff.cgi: 404 Not Found. at D:\Ho mePage\cgi-bin\tiff.cgi line 8.

どうぞ、ご教授お願いします。

お礼日時:2002/10/23 19:45

CGI でやるんですよね?言語は??



Perl でやるとしたら、以下のようなサンプルでどうでしょうか?
---
use CGI::Carp 'fatalsToBrowser';
use constant CRLF => "\x0d\x0a";

# 画像のパス
my $image_path = '/usr/local/apache/htdocs/images';
my $path_info =~ s|^/(.+?)|$1|;
my $tiff_file = $image_path.'/'.$path_info;
my $size = (-s $tiff_file) || die '404 Not Found.';
open(FH, $tiff_file) || die $!;
binmode FH;
binmode STDOUT;

# ヘッダの出力
print 'Conten-length: '.$size.CRLF,
'Accept-ranges: byte'.CRLF,
'Content-Disposition: inline; filename="'.$path_info.'"'.CRLF,
'Content-Type: application/octet-stream'.CRLF.CRLF;

# 画像ファイルの出力
my $buffer;
print $buffer while(read(FH, $buffer, 1024));

close FH;
---

これを hogehoge.cgi とした場合、
http://your.domain/cgi-bin/hogehoge.cgi/TIFF_FIL …
のように、ダウンロードさせたいファイル名を "CGI 名/Tiff ファイル名" として指定してアクセスして、ダウンロードさせます。

ただ、IE の場合はそれでも QT で表示してしまう可能性があります。もしその場合は…防ぎようがないです。
    • good
    • 0

 それはMIMEの設定が QuickTime になってるんですね。


 なので、サーバーの設定を、拡張子が .tif の場合は画像ファイルであると認識するように変更する必要があります。
 (変更しなくてもプログラム側で何とかなりますが、むしろこっちの方が面倒です)

 サーバーがアパッチであれば、.htaccess を書き換えればできます。

  AddType tiff/image .tif

 とまあ、こんな感じになると思います。
 「tiff/image」の部分は、これでよかったかちょっと自信なしです。
    • good
    • 0

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