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

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

Javascriptでファイルを開きたい

現在社内用のWEBアプリを開発しておりまして、 クライアント側でjavascript、サーバー側でPHPとMySqlを利用しています。 クライアント側で検索ワードを入力すると、サーバー側でデータベースを検索して該当するレコードのファイルパスを返してくれるようになっています。 現状で返ってくるパスは絶対パスでネットワークドライブのN:\data\ファイル名といった感じで jpgやpdf、エクセルファイルなどです。 かえってきた結果をリストボックスなどにセットして、クライアントがそれをクリックするとそのファイルを開く、ということを実現したいのですがやり方がよくわかりません。 開くアプリケーションは指定する必要はなく、windows上で拡張子に関連付けされているもので構いません。 xlsファイルならエクセルが起動して、といった感じです。 対象ファイルを印刷するコマンド等も発行できると尚ありがたいです。 ちなみにgoogleで調べて以下のようなことを試してみたのですが、 var wsh = new ActiveXObject("WScript.Shell"); wsh.exec("cmd.exe N:\data\sample.bmp"); クライアント側がアクセスしているのはサーバー/xxx.phpなせいか ランタイムエラーと出て実行されませんでした。 なお、上からブラウザをchromeで指定されているので、実は上のコードは結局使えないようですが・・・ ただ現状でどのブラウザでも対応策が見えてないので、chromeで出来れば申し分ないのですが、 ひとまずブラウザは問いません。 ご存知の方いらっしゃればよろしくお願いします。

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

  • ベストアンサー
  • 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% (4848/10262)
回答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% (4848/10262)
回答No.1

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

tenmatakumi
質問者

補足

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

関連するQ&A

  • ファイルのダウンロードが始まってしまう

    ブラウザで自分の作成したPHPファイルを指定して表示させようとすると、 その指定したPHPファイルをダウンロードしようとしてしまいます。 サーバーのOSはWinXP クライアントのOSもWinXP webサーバーはapache2.50 ブラウザはIE6 です。 どなたか理由が分かる方いらっしゃいませんでしょうか。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • javascriptでのローカルパスの指定の仕方

    javascript(wsh)のローカルパスの記述で質問です いままでファイルを実行する場合に、こんな感じで記述してました。 var WSHShell = new ActiveXObject("WScript.Shell"); WshShell.run("C:\\wsh\\act\\kyoten1.js"); のように実行ファイルを直接指定していました。 今後、ファイルのフルパス名を取得して代入したいのです fullpath = WScript.ScriptFullName; WshShell.run(fullpath); → うまくいきません・・・ どのようにローカルのパス名を記述すればよいのでしょうか? 大変恐縮なのですが、お分かりの方ご教授いただけると幸いです。

  • ファイルのコピー

    あるサーバーからあるサーバーにファイルをPHP上でコピーしたいのですが、 PHPでコピーするというのはアップロードとなるのでしょうか?? 以前は画像のファイルをアップロードしたのですが、 それは_FILEを受け取っていました。 今度のファイルは固定の場所にあるので、そのファイルをわざわざ参照するわけではありません。 現在あるファイル場所を指定して、うまくアップロードすることはできるのでしょうか? パソコン側で受け取るときにディレクトリ名が普通のパスとは違った表示で受け取っているように見えるのすが。

    • ベストアンサー
    • PHP
  • ファイルDSNをサーバーから参照したい

    こんばんわ。 今、ExcelVBAで Oracleからデータを取得し結果をExcelでグラフと表を 作成する というプログラムを作っています。 OracleとODBC接続をしようとしているのですが、 クライアントに個別に設定するのは大変なので サーバーに接続情報を持ちたいと考えています。 ファイルDSNをサーバーに持ち、プログラム上で ファイルDSNのパスを指定して接続情報を得る という事は可能でしょうか? Excelファイルもサーバーに置いて実行する予定です。 よろしくお願いします。

  • PHPからExcelVBAを制御できますか?

    環境はxp、apache2、php5、Postgresql8.2です。 1台のPCをサーバ&クライアントにしています。 ただ今PHPとPostgresqlの勉強をしています。 いつも質問に答えてくれてありがとうございます。 サーバーはwindows、Excelが入っています。 伺いたいことは、 PHPからExcelVBAを制御できるかどうかということです。 過去の質問を検索したところ、 >system系の関数でWSHからVBSを制御する手はあるかもしれません。 と、書かれていたのですが 今ひとつ分かりません。 ご教示して頂けたら幸いです。

    • ベストアンサー
    • PHP
  • ファイル内容を比較する方法

    サーバ側とクライアント側の2つのファイル保存フォルダの中を比較して、クライアント側に不足しているファイルをサーバからダウンロードするというプログラムを作成しています。 現時点では、両方のフォルダのパスを指定して、FileクラスのlistFilesによってフォルダ内の一覧情報を取得し、それぞれのフォルダ内のファイル名を比較して一致しない場合はそれをダウンロードするという方法で不足しているファイルを取得することができています。 しかし、ファイル内容が異なっているのにファイル名が同じであるときにそれをダウンロードできないという問題がでてきて困っています。もしファイル内容まで一致しているかどうか比較できる方法があったら教えてほしいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • sendmailのパス指定方法

    mb_send_mailを使ってメールを送信しようとしているのですが、 テストで最初に送ったメールは届いたのですが、ソースを変えていないにも関わらず、しばらく時間がたった後に再び送信を行ったら、全くメールが届かなくなりました。 レンタルサーバのサイトに、sendmailのパスが書いてあったので、そのパスを指定していないことが原因かと思ったのですが、パスの指定方法がわかりません。 php.iniがいじれればいいのですが、サーバーを借りている側でいじれるようなファイルではないですし、 .htaccessではsendmailのパス指定はできないとも聞きました。 sendmailを使っているphpファイル内の記述で、パスを指定することはできないのでしょうか?

    • ベストアンサー
    • PHP
  • リンクのExcelファイルをIE上ではなく、Excelウィンドウで開く

    リンクのExcelファイルをIE上ではなく、Excelウィンドウで開くように、JavaScriptを作成したのですが、 パス指定が、フルパスでなければ開けないのです。 <script language="JavaScript"> function excel(){ wshshell=new ActiveXObject("WScript.Shell") wshshell.run("excel c:/sifuto.xls") } </script> <a href="javascript:excel()">EXCEL</a> 上記のように作成したのですが、同じフォルダ内にExcelデータを置いた場合、 「ファイルがみつかりません」 となってしまい、開くことが出来ません。フルパスも、長すぎると同じことになります。 どなたか知恵をおかしいただけませんでしょうか?

  • mcintosh(マッキントッシュ)でネットワークフォルダへのパス指定

    mcintosh(マッキントッシュ)で、ネットワークにあるフォルダをパス指定で開くには、どうすれば良いでしょうか? Windowsであれば、ブラウザ(IE)で "\\Fileserver\ファイルサーバ\顧客情報" などと指定すれば、エクスプローラーが起動して、ファイルの閲覧・編集・削除が実行できます。 これと同じように、パスで指定してフォルダを開くことができれば、ブラウザではなくても、何かオプションのソフトをインストールしてもどちらでも結構です。 使用目的は、ある制作プロダクションの社内用のナレッジマネジメントシステムで、ナレッジマネジメントシステムのホストから、ファイルサーバのパスを指定したいことです。 ナレッジマネジメントが、ブラウザベースですので、ブラウザを機転としたいですが、ブラウザから何かのアプリを経由してもかまいません。 また、ローカルのファイルへのパス指定については、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=540648 などにドキュメントがあったのですが、ネットワーク上のファイルへのパス指定は見あたりませんんでした。 少しでも結構ですので、ご教授下さいませ。 宜しくお願い致します。

  • PHP開発でのイメージファイルのパス

    PHP初心者です 既存システムの改修をしています。 index.phpにタグにおいて画像ファイルのパスを指定しています 今回画像ファイルを移動したのですが現状のパスでも移動したパスでも画像が表示されます ざっくりな質問で申し訳ないですが、現状パスでも表示される理由をご教示ください eclipceで開発しております

    • 締切済み
    • PHP

専門家に質問してみよう