• ベストアンサー

HPでPDFファイルをクリックしたとき、AdobeReaderで開かずにダウンロードさせるには?

Webページにおいて、PDFファイルをクリックしたら、通常はAdobeReaderでPDFファイルが開いてしまいますが、PDFファイルを開くのは重くてブラウザが固まるケースが非常に多いのでいやがる方が多く、回避したく思います。 要はカタログなどなので、開かずにダウンロードしてもらう形にしたいです。 検索していると、.htaccessを使ってダウンロード型に自動的に変更する方法があたので導入しましたが、IE7でできませんでした。 書いてあった内容 ------------------------------------------------------------ <a href="○○.pdf">PDFファイルをダウンロード</a> とタグで書けばダウンロードできます。 が、そのままだと、通常はブラウザで表示されてしまうと思います。 ダウンロードになるようにするためには 「.htaccess」ファイルなどを使って、PDFのMIMEタイプを変更をする必要があります。 手順: 「.htaccess」を作り、 ------ AddType application/octet-stream pdf ------ と記述、FTPでサーバーにアップロード。 これで、リンクをクリックすると、そのまま開かずに、ダウンロードが開始されます。 ------------------------------------------------------------ IEではダメでしたが、一応Firefoxでやってみるとダウンロード型にできました。 でも、当然ながらIEでダメなどブラウザを選ぶのではどうしようもありません。 ブラウザがどうあろうがうまくいく方法で、なるべく簡便に済ませられる方法がないでしょうか? なお、補足しますと、aタグのリンクでPDFファイルを指定しますが、そのままの記述だけだとダウンロードになってくれず、PDFファイルがブラウザで開いてしまいます。 このままの状態でダウンロードにするにはユーザ側で右クリックをしてもらわなければなりません。そうではなく左クリックしただけで勝手にダウンロードになるようにしたいです。 要は、.ZIPファイルみたいにクリックしただけでダウンロードになってくれるのが良いです。

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

  • ベストアンサー
回答No.3

HeaderディレクティブはHeaderモジュールをインストールする必要があります。 Apacheの再コンパイルが必要になると思いますので、一般的なレンタルサーバーでは使えません。 CGIを使ってContent-Dispositionなどを出力するようにするのが簡単だと思います。

touchy
質問者

お礼

> CGIを使ってContent-Dispositionなどを出力するようにするのが簡単だと思います。 そうですか、簡単そうですか! どこにノウハウ書いてあるかな、探してみます。 取り急ぎお礼まで

その他の回答 (3)

noname#100277
noname#100277
回答No.4

.htaccessとCGIの組み合わせで実行するのが望ましい処なのですが、どちらか一方、又は、両方使えないサーバーも存在する事を考えると「右クリック」で「ローカル保存」させるのが確実なのでは? サーバーやブラウザ依存せずに済みます。 どうしてもDL形式にしたいのなら書庫化する方法も在りますが、コレもサーバー依存でZIP等の書庫をUP禁止にしてるサーバーも在る。

touchy
質問者

お礼

No3の方がCGIの方法を書かれていて簡単だとありますが、違うのでしょうか?? CGI単独でなく、htaccessと併せて使わないといけないのでしょうか? だとしたらNo3の方の方法は無理があるということなのかな?? 済みません何が正しいのかわからなくなって混乱しております

回答No.2

紛らわしくてすみません。 参考のための一例ですので、あれをそのまま引用する必要はありません。 以下のように記述すればどうでしょうか? ------ <Files *.pdf> ForceType application/octet-stream Header set Content-Disposition attachment </ Files> ------

touchy
質問者

お礼

再度ありがとうございますm(_ _)m > 参考のための一例ですので、あれをそのまま引用する必要はありません。 なるほど、了解いたしました。お手数おかけいたします。 > 以下のように記述すればどうでしょうか? ------ > <Files *.pdf> > ForceType application/octet-stream > Header set Content-Disposition attachment > </ Files> > ------ はい、ご紹介のページにあったので一応私の方でもすでに試してみておりました。 が、やはり500エラーになるのです。。。 ちなみに、一行目だけにして、streamのあとにpdfと入れて一行目だけで試してもダメでした。 どこかに記載あったのですが、Headerモジュールが使えないとダメだとかありましたが、それが関係しているのかと思い、サーバ会社に問い合わせも一応しております。返答まだなのですが。

回答No.1

IEはContent-Typeを無視して内容(Content sniffing)で表示方法を決めてしまうことがあります。 これを避けるにはContent-Dispositionを指定します。 http://support.microsoft.com/default.aspx?scid=kb;JA;260519 http://blog.xlune.com/2007/06/htaccess.html http://www.atmarkit.co.jp/fcoding/articles/webapp/02/webapp02a.html

touchy
質問者

補足

ご紹介の http://blog.xlune.com/2007/06/htaccess.html に書かれたあった、 RemoveHandler cgi pl ForceType application/octet-stream SetEnvIf Request_URI "/([^/]+)$" FILE_NAME=$1 Header set Content-Disposition "attachmenti; filename=%{FILE_NAME}e" の記述をhtaccessに追加しましたが500エラーが出てページ自体が開かなくなりました。。。以下のエラー文章です。 ------------------------------------------------------------ Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, webmaster@interq.net and inform them of the time the error occurred, and anything you might have done that may have caused the error. More information about this error may be available in the server error log. ------------------------------------------------------------ なので、もしかして、一行目にcgi とかplとか書いてあるので、これは もしかして一行目のRemoveHadlerのcgi とpl というところをpdfにしてもみましたが、 それでも同じエラーでした。 現在記述しているhtaccessは以下です。 ------------------------------------------------------------ AuthUserFile /server-pass/files/.htpasswd AuthGroupFile /dev/null AuthName "Please enter your ID and password" AuthType Basic RemoveHandler pdf ForceType application/octet-stream SetEnvIf Request_URI "/([^/]+)$" FILE_NAME=$1 Header set Content-Disposition "attachmenti; filename=%{FILE_NAME}e" <Limit GET POST> require user idhitorime idhutarime </Limit> <Files ~ "^.(htpasswd|htaccess)$"> deny from all </Files> ------------------------------------------------------------ アクセス制限をかけている領域なのですが、その記述が関係するとも思えないし・・・ 何がダメなのでしょうか。

関連するQ&A

専門家に質問してみよう