- PR -

Tomcatから種類に関係なくファイルをダウンロードしたい

1
投稿者投稿内容
take11
会議室デビュー日: 2006/02/16
投稿数: 18
投稿日時: 2007-09-15 23:01
部内でファイルを共有するようなWebアプリケーションを作ろうと思っています。サーバのOSはWindows、WebサーバはTomcatです。
FTPを使ってもいいのですが、ファイルの解説が必要なので、WEBページからダウンロードできるようにしたいと思っています。
ファイルをアップロードする方法はわかるのですが、ダウンロードする方法が思いつきません。
例えば、サーバー側のcドライブのルートにあるaaa.javaというJavaのソースをダウンロードするとき、ダウンロードページに

<a href="c:/aaa.java">ダウンロード</a>

と書いても、上手く動作しません。でも、zipファイルならこれでダウンロード可能です。また、jspファイルをダウンロードさせたいときに

<a href="c:/aaa.jsp">ダウンロード</a>

と書くと、言うまでもなくダウンロードではなく、aaa.jspに飛ぼうとします。
 さすがにjspファイルをダウンロードすることは無理かなとも思うのですが、zipのように、他のファイルもダウンロードできるようにするには
・Tomcat側の設定
・HTMLの書き方
などをどうかすれば可能でしょうか?
 web.xmlの

<mime-mapping>
<extension>zip</extension>
<mime-type>application/zip</mime-type>
</mime-mapping>

のあたりに、どうか記述すればいいのかとも思っていますが、この方法も細かくはよくわかりませんし、アップロードされる可能性がある全てのファイルに対して記述しないといけないということだと面倒だと思っています。
 お知恵をお貸し頂ければと思います。よろしくお願いいたします。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-09-17 09:04
引用:
<a href="c:/aaa.java">ダウンロード</a>

これだとクライアント(ブラウザを立ち上げてるマシン)のcドライブを見てしまいませんかね。
href="http://" の形で書くか、相対パスで書かなきゃダメです。
いずれにしてもaaa.javaがhttpで(webを通して)見える必要があります。

引用:
<mime-mapping>
<extension>zip</extension>
<mime-type>application/zip</mime-type>
</mime-mapping>

のあたりに、どうか記述すればいいのかとも思っていますが、

jspファイルの場合は、web.xmlの<servlet-mapping>にservletとして実行する設定が書いてあるので
こっちも消さなきゃだめです。その上でmime-mappingに設定を書けばダウンロードできますが
逆にすべてのjspはservletとして実行されなくなります。それがダメなら、aaa.jspを
ファイルとして読み込んで、レスポンスに吐くプログラムを書けばよいでしょう。
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2007-09-17 09:46
 サーバー側でサーバーのファイルを検索して、
それを元に画面にファイルのリンクを表示すれば良いだけかと。
ただ、そのときファイルはURLで認識できるようなパスには、
置いてないと思われるので、下記のようにやればよいでしょう。
コード:
 <a href="SampleServlet?file=a.txt">a.txt</a>
 <a href="SampleServlet?file=b.exe">b.exe</a>

take11
会議室デビュー日: 2006/02/16
投稿数: 18
投稿日時: 2007-09-19 16:46
べるさん
 ありがとうございます。そうですね、Cドライブを見に行きますね。ローカルでモックアップを作成してテストしていたので気付きませんでした。
 ちょっと試してみます。

> 逆にすべてのjspはservletとして実行されなくなります。それがダメなら、aaa.jspを
> ファイルとして読み込んで、レスポンスに吐くプログラムを書けばよいでしょう。

 JSPは共有化のニーズが少ないので、諦める方向で検討しています。。

takuさん
 ありがとうございます。
 テキストで表示できるようなものならいいのですが、バイナリ(jarなど)があるので、どうしたものかと思っております。。

また、試してみて、うまくいったらご報告させていただきます。<(_ _)>
Ray
ベテラン
会議室デビュー日: 2007/09/13
投稿数: 88
投稿日時: 2007-09-20 10:09
通常のHTTPアクセスはダウンロードなのではないでしょうか。
ダウンロードした時に表示するか保存するかは、ウェブブラウザがContent-typeを見て表示できない場合に保存しているだけで。
ブラウザの設定に依存しますが、未知のContent-typeであれば保存するのでは。
なのでjspでファイルを読んでContent-typeはapplication/dataに設定し出力すれば、ある程度要望は満たせそうです。

htmlのa要素にtype属性がありますが、ブラウザの対応は確認してません。
<a href="a.txt" type="application/data">
とか。
take11
会議室デビュー日: 2006/02/16
投稿数: 18
投稿日時: 2007-09-20 17:38
れいさん

引用:

れいさんの書き込み (2007-09-20 10:09) より:
通常のHTTPアクセスはダウンロードなのではないでしょうか。
ダウンロードした時に表示するか保存するかは、ウェブブラウザがContent-typeを見て表示できない場合に保存しているだけで。
ブラウザの設定に依存しますが、未知のContent-typeであれば保存するのでは。
(略)
htmlのa要素にtype属性がありますが、ブラウザの対応は確認してません。
<a href="a.txt" type="application/data">
とか。



できました!
 なるほど、そういう仕組みなんですね。やっと腑に落ちました。
 どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)