• ベストアンサー

画像を表示させずにダウンロード

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

質問者が選んだベストアンサー

  • ベストアンサー
  • nipotan
  • ベストアンサー率59% (134/227)
回答No.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 がどうだったかわからないのでなんともいえません。まずは、こんな感じの設定でお試し下さい。

noname#8233
質問者

お礼

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

その他の回答 (4)

noname#3361
noname#3361
回答No.4

CGIでは有りませんが。 サムネイル上で右クリック→対象をファイルに保存 をするとリンク先が直接DLできますよ。 サムネイルの下にでも上記の但し書きを添えるのが一番簡単ではないでしょうか。

noname#8233
質問者

お礼

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

  • nipotan
  • ベストアンサー率59% (134/227)
回答No.3

失敬、 my $path_info =~ s|^/(.+?)|$1|; の箇所は、 my $path_info = $ENV{PATH_INFO}; $path_info =~ s|^/(.+?)|$1|; にしてください。

noname#8233
質問者

お礼

早速の回答ありがとうございます。 書くのを忘れていたんですが、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. どうぞ、ご教授お願いします。

  • nipotan
  • ベストアンサー率59% (134/227)
回答No.2

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_FILENAME.tiff のように、ダウンロードさせたいファイル名を "CGI 名/Tiff ファイル名" として指定してアクセスして、ダウンロードさせます。 ただ、IE の場合はそれでも QT で表示してしまう可能性があります。もしその場合は…防ぎようがないです。

noname#25358
noname#25358
回答No.1

 それはMIMEの設定が QuickTime になってるんですね。  なので、サーバーの設定を、拡張子が .tif の場合は画像ファイルであると認識するように変更する必要があります。  (変更しなくてもプログラム側で何とかなりますが、むしろこっちの方が面倒です)  サーバーがアパッチであれば、.htaccess を書き換えればできます。   AddType tiff/image .tif  とまあ、こんな感じになると思います。  「tiff/image」の部分は、これでよかったかちょっと自信なしです。

関連するQ&A