GPSログのダウンロードリンク顛末記

このサイトでは、登山やウォーキングのGPS軌跡を地図ページに公開している。
当サイトに訪れて頂いた方が、そのGPSトラックログをダウンロードして、ご自分のGPSにインストールして山行の参考ルートとして使っていただけるように
「GPSトラックデータはここからダウンロードできます」というリンクを付けている。

しかし、この「ダウンロード・リンク」の付け方を知らなかった。
画像やページへのリンクは、そのファイルへリンクを張るだけで実現できる。
ところが「ダウンロード」の場合、ファイルへ直接リンクを張ると、右の画像のようにファイルの中身が丸見えになってしまって、一般的なダウロード・ポップアップ・ウィンドウとはかなり勝手が違う。
中身が丸見えになっても特に困るものでもないし、ブラウザのメニューで「名前を付けてファイルに保存」を選択すれば、一応ファイルとして使えるので、これでもいいか・・・。 と、安易に考えて長い間そのままにしていた。

ところがある日、岩手県の方から「ここからダウンロードできます」をクリックしてブラウザの保存機能で保存しても、「文字化けしていたり、GPXファイルとして保存できなかったりで、使えません。どうすればいいのですか?」 と言うメールが届いた。
その方とメールのやり取りをして、調べてみると、確かにブラウザに Internet Explorer 9 を使っておられる場合は、正常に保存できないことが分かった。
その後、いろいろ調べてみると Internet Explorer 9 に限らず、私が使っている Firefox でも同様な現象が発生することが分かった。
たまたま、私のブラウザの設定が「互換モード」になっていたために、正常に保存できていただけだったことが分かった。
これは何とかしなければならないが、取り敢えず「Q&A」のページに応急的な対処法を書いた。
つまり、ブラウザを「標準準拠モード」ではなく、臨時的に「互換モード」で動作させて保存して頂くことにした。

一般的なダウンロードボタンはどのように作るのかと、ネットを調べたら、直接開くことができない Zip ファイルに変換すれば良いことが書いてあった。
早速「窓の杜」サイトから「圧縮/解凍」のフリーソフト「Lhaplas」をダウンロードして圧縮してみた。
ところが拡張子が「.gpx」のファイルは圧縮できるファイルの仲間に入ってないようだ。 いろいろ試してみたがやっぱりダメだった。
これでまたお手上げだ。

その後、Perl/CGI の勉強をしていたら、簡単なCGI で実現できることを紹介しているサイト「ぼちぼち行こう」を偶然見つけた。
その記事を参考に下記のように書いて、1個だけやってみた。

$filedir = './';
$filename = 'new.gpx';
$filepath = $filedir . $filename;

print "Content-type:application/octet-stream; name=\"$filename\"\n";
print "Content-Disposition: attachment; filename=\"$filename\"\n\n";
open(IN,"$filepath");
print <IN>;
close( IN );

すると期待どおり右のようなポップアップウィンドウが表示され、「ファイルを開く」と「ファイルを保存」が選択できるようになった。
しかし、これはマップページがある全フォルダに1個ずつ保存しなければならない。
山フォルダだけでも95フォルダあり、これに全部同じ内容のファイルを保存するのは面倒である上に無駄だ。
せめて、「yama」「walk」「tabi」フォルダに1個ずつなら許容範囲と云うところか・・・。
それには、上記の $filepath に、各マップファイルのフォルダパスを教えてやる必要がある。
Perl で、コマンドラインから引数を渡すのはどのようにするのだろうか・・・?

また、ネットからお知恵拝借と相成った。
そして 「Yahoo!知恵袋」

CGI 側
$param = @ARGV[0];
HTML 側
"dl.cgi?../yama/000000/new.gpx"

でいいことが分かった。
これを使わせてもらって実験してみたら、どうやら行けそうだ。
そこで下記のファイルを作って、1個で全コーナーに共通で使えるようにした。

use File::Basename;

$param = @ARGV[0];

my $filename = fileparse( $param );

print "Content-type:application/octet-stream; name=\"$filename\"\n";
print "Content-Disposition: attachment; filename=\"$filename\"\n\n";
open(IN,"$param");
print <IN>;
close( IN );

これで長い間分らなかった「ダウンロード・リンク」の疑問が全て解決したかに見えた。
しかし、マウスを近づけると CGI の保存先などが見えてしまっている。 これはセキュリティ上問題があるかもしれない?

そこでまた、ネットを検索したて見た。 そして更に簡単な方法を書いた「ミケネコの htaccessリファレンス」に辿り着いた。
これが全ての点で理想的かもしれない?
しかも、それはこんなに超簡単!!
「.htaccess」というファイルを作って下記の1行を書くだけ。 それを置いたディレクトリ以下のサブ・ディレクトリも含むファイルに有効になるらしい。

AddType application/octet-stream .gpx

テストしてみたら完璧だ! 
これなら、リンクの文字列は

<a href="new.gpx">

のままでいいらしい。

これで万全だ。 早速、私と弟のサイトの全ページを改修し、アップした。
そして翌日、Internet Explorer 9 でアクセスしてみたら、ファイルの中身が丸見えになってしまっているではないか!
あれ??  おかしいなあ??  確か、昨日はうまく行っていたはずだったがなぁ・・・??
Internet Explorer では確認作業を忘れたのかな??
何度やってみても、ファイルの中身が丸見えになっているので、IE ではこの方法は使えないようだ。
俺も歳だな・・・・。 IE での確認作業を忘れたようだ。 70歳を越えてから、こうしたミスが急に多くなったような気がする。
念のため、「Firefox 14」 「Chrome 21」 「Safari 5」 「Internet Explorer 9」 の4つのブラウザで確かめてみた。
「.htaccess」ファイルでMIME タイプの関連付けを制御するらしいが、どうやら 「Internet Explorer 9」 だけはうまく行かないようだ。

「IE9 .htaccess」で検索したら、物凄い数がヒットした。
読んでみるとどうやらIE8までは他のブラウザと同じ振る舞いをしていたようだが、IE9になってからキャッシュを読み込むように仕様が変更されているらしいことが書いてある。 そこでキャッシュを全部削除してやってみたが、やっぱりダメだった。
そして Internet Explorer ではこの方法は使えないと書いてある決定的なサイト(画像でダウンロード画面を出す)に辿り着いてしまった。
そこには、こんな風に書いてあった。

独自の利便主義を爆進するIEは、MIMEタイプもコンテントヘッダも拡張子さえも見ず、自分で勝手に判断します。
一番実現不可能なブラウザです。

結局、元の 「ぼちぼち行こう」 + 「Yahoo!知恵袋」 方式に戻すことにした。
「Internet Explorer 9」 だけは他のブラウザとはいろんな面でややこしい異端児のブラウザらしい。
IE に関して書かれているサイト
  ・Microsoft サポート
  ・おぬしもサルじゃのぉ(^o^)日記
  ・WAVE1008の日記
  ・ITサポーターの仲間たち

データ
  • 2012.08.06(月)
アーカイブ

現在位置: ホームなんでも日記メニュー > このページ