• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Javascriptでファイルを開きたい)

Javascriptでファイルを開く方法とは?

このQ&Aのポイント
  • Javascriptを使ってファイルを開く方法が知りたいです。
  • 現在、クライアント側で検索ワードを入力すると、サーバー側で該当するレコードのファイルパスを返しています。
  • ファイルの拡張子に関連付けされているアプリケーションでファイルを開く方法を教えてください。

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

  • ベストアンサー
  • dscripty
  • ベストアンサー率51% (166/325)
回答No.5

[ANo.3] の補足への回答ね。 「linuxは使用し ておらず Windowsをサーバーにしてそこにxampp……」 全部まとめて 1台のサーバ(PC?) に入ってるなら、ものすごく簡単。 Apache の WebDAV モジュール使うんだけど、 これなら、表示と印刷だけじゃなくて、Excel とか Word とかなら Windows のネットワーク共有フォルダのみたいに、そのまま変更して上書き保存できるよ。 いわゆる、ウェブフォルダっていわれてるあれね。 ↓すごくわかりやすい解説のページ Apache2.0+WebDAVの設定(Windows編) http://www.aconus.com/~oyaji/www/apache_win_dav.htm この場合も、プロトコルは HTTP だから、ファイルリストのリンクは、 <a href="/data/……" title="説明">ファイル名</a> だよ。 今回は、a タグでリンクすればすむことだから、 onclick="……" とかにして JavaScript をつかったりしないほうが、すなおかな?

tenmatakumi
質問者

補足

ウェブフォルダですか、確かにこれならしたい事を実装出来そうな気がします。 よく読んでチャレンジしてみますね。 リンク付きの丁寧なご回答ありがとうございました。

その他の回答 (4)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.4

No1です。 >やはりアドオンですか・・・ 質問内容に文字通り答えるとそう言うことになります。 他の方の回答のように、根本的に作り方を変えると可能なこともあります。 >現状で返ってくるパスは絶対パスでネットワークドライブのN:\data\ファイル名といった感じで のシステムを捨てて、作り直す。 そもそも根本的にやりたいことは何なのかですよね。 「クライアント側で検索ワードを入力すると、サーバー側でデータベースを検索して該当するレコード をファイルにした物をクライアントで開きたい」 がやりたいことであれば、他の方の回答の方向で可能だし、普通はそうします。

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.3

サーバ構成によって、より簡単な解決方法がかわっちゃうから、とりあえず、添付画像の Fig.1 の構成だったとして、話をすすめるね。 図の中の略称はこれね。 DB : データベース HTTPD : ウェブサーバ Network File Sharing(SMB) :ネットワークファイル共有サービス Fig.1 のときだけど、PHP をとおして検索されたデータベースの中のファイル保存先情報を、ウェブクライアントはウェブサーバから受け取るわけだけど、 「N:\data\ファイル名」 のような受け取り方だと、Web ブラウザは、ファイルの保存先がローカルの PC 上にあることとして処理するよ。 このようなときは、セキュリティー上の理由で、ウェブページにファイル保存先へのリンクがあってもクリックでアクセスできないようになっているんだ。 つまり、このままだと解決できないということ。 じゃあどうするかというと、添付画像の Fig.2 な感じ。 まず、(Windows Server) のネットワーク共有フォルダを cifs で (Linux) に mount しちゃう。 # mount -t cifs //ファイル共有サーバ名/data /var/www/html/data -o username=共有フォルダのユーザ名,password=パスワード ※ http://www.atmarkit.co.jp/flinux/rensai/linuxtips/a004mountcifs.html 次に、PHP での処理だけど、DB から戻ってきたファイル保存先($file_location)を正規表現で変換する。 $file_location = preg_replace("\\", "/", $file_location); $file_location = preg_replace("^N:", "/", $file_location); これで、リンク先がウェブサーバでマウントした、ネットワーク共有フォルダの中のファイルを指すから、ウェブブラウザからアクセスできるようになるよ。 注意点だけど mount で使った『共有フォルダのユーザ』がアクセスできるファイルは、ウェブサーバにアクセスできる人なら誰でもアクセスできてしまうこと。 これは、固定のユーザ名とパスワードをつかって、ウェブサーバでネットワーク共有フォルダを mount してるからだけど、もし、アクセスするユーザによって、アクセスを制限させたいなら、この方法ではむり。 アクセス制限が必要なら、また、別の、ちょこっと PHP が面倒な方法があるよ。

tenmatakumi
質問者

補足

画像付きでのわかりやすい説明ありがとうございます。 ひとつ説明不足だったので申し訳ないのですが、linuxは使用しておらず Windowsをサーバーにしてそこにxampp(http://www.apachefriends.org/jp/xampp-windows.html)というツールをインストールして、その上でPHPが動いています。 xamppでも同様の事が出来るのか調べてみようと思います。 現状では検索語句に対してPHPが <select> <option value="N:\data\sample.xlsx">sample.xlsx</option> <option value="N:\data\sample.pdf">sample.pdf</option> <option value="N:\data\sample.tif">sample.tif</option> <option value="N:\data\sample.lwo">sample.lwo</option> </select> といったようなリストボックスを作って返してくれるので、 onclickなりonchangeなりでクライアント側でそのファイルを開きたい、ということです。

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

サーバー側で動的にEXCELファイルを作成し、MIMEヘッダー付きで送る(リクエストはJavascriptから)というのは実現できないでしょうか。 http://www.phpbook.jp/pear/pear_spreadsheet_excel_writer/

tenmatakumi
質問者

補足

リンク先拝見しました なかなか興味深いのですが、今回の件はEXCELだけではないのでこれでバッチリというわけには行かなさそうです。 でも今後いろいろ使えそうなので参考にさせて頂きます。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

IE以外だとブラウザのアドオンを作らないと無理です。 IEだと new ActiveXObject("WScript.Shell") を使う方法で可能ですが、「サーバーからクライアントPC上の任意のプログラム(ディスク初期化とか。。。)を実行出来る」というまでにセキュリティ設定を弱める必要があるので、実質的には不可能です。同じく、プラグインを作るしかないですね。

tenmatakumi
質問者

補足

やはりアドオンですか・・・ 既にそういうのないかと思って探してみたものの見つからずでした アドオンは作り方からわからないので、その辺の調査から必要になりそうです

関連するQ&A