- - PR -
[VS2005 ASP.NET VB]サーバー側のファイルをIEでオープン
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-07-18 09:39
何時もお世話になっております。
OSはWindowsXPのHome、現在開発環境でローカルのみで動かしています まずTreeViewを使いサーバーのフォルダを階層表示し そのノードがクリックされたタイミングで フォルダかファイルかを判定し、ファイルなら新たにIEを開き別ウィンドウで TreeViewで選択されたファイルをオープンする と言う処理を実現しようとしています まず試みたのが str = "<SCRIPT LANGUAGE='javascript'>" str &= "var objWindow = window.open('" & URL & "','','toolbar=no,location=no,status=no,directories=no,menubar=no,scrollbars=yes,resizable=no');" str &= "objWindow.focus();" str &= "</SCRIPT>" page.ClientScript.RegisterStartupScript(page.GetType, "OpenNewWindow", str) 上記コードでURLの変数に、ファイルのフルパスを入れると言う処理を試したのですが JavaScriptのエラーが出て新しいウィンドウが開きませんでした その後 下記掲示板の記述を見つけ http://bbs.wankuma.com/index.cgi?mode=al2&namber=1633&KLOG=10 引用 □投稿者/ ぼのぼの (7回)-(2007/03/01(Thu) 13:10:54) あ、もいっこやり方がありますね。 1.A.aspxがwindow.open()でB.aspxを開く 2.B.aspxのLoadイベント内でファイル出力{ここではExcelとします} 3.B.aspxで2.の後にResponse.Redirect("ファイル×パス--<訂正>-->○URL") と言う方法で実現できないか考えてみました まずテスト的に 新しいWebページを作成し Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Response.Redirect("C:\Documents and Settings\USER\My Documents\a.xls") End Sub ページロードのイベントでこのような形でファイルパスを記述するとオープンは出来ませんでした 上記引用3の B.aspxで2.の後にResponse.Redirect("ファイル×パス--<訂正>-->○URL") 部分でファイルパスは× URLを書けといわれているのだと思うのですが、この場合どういった形でURLを指定したらよいのでしょうか? 思いつくのは IIS上に上がってる部分に作業フォルダの様な物を作成し、その都度指定されたファイルをそこにコピーし、そこのURLを指定すると言う方法なのですが 何かアドバイス有りましたらご教授願いします 以上、よろしくお願いいたします |
|
投稿日時: 2008-07-18 10:07
上記作業フォルダへのコピーで
直接URLを指定しwindow.openで開くと言うコードを考え Protected Sub TreeView1_SelectedNodeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TreeView1.SelectedNodeChanged Try Dim strItem As String = sender.SelectedNode.Value If InStr(strItem, ".") <> 0 Then Dim strUrl As String = Directory.GetCurrentDirectory & "\file" & Mid(strItem, InStrRev(strItem, "\"), Len(strItem)) System.IO.File.Copy(strItem, strUrl) Dim str As String = "<SCRIPT LANGUAGE='javascript'>" str &= "var objWindow = window.open('" & URL & "','',' _ toolbar=no,location=no,status=no,directories=no,menubar=no,scrollbars=yes,resizable=no');" str &= "objWindow.focus();" str &= "</SCRIPT>" page.ClientScript.RegisterStartupScript(page.GetType, "OpenNewWindow", str) End If Catch ex As Exception End Try End Sub 上記コードを書いたのですが Directory.GetCurrentDirectory で、取ってこれるディレクトリが "C:\Program Files\Microsoft Visual Studio 8\Common7\IDE" となり、プロジェクトのフォルダに作成した作業フォルダが出来てなく System.IO.File.Copy(strItem, strUrl) この部分でフォルダが無いと言うエラーになりました・・ サーバー側で実行した場合も同じように作業フォルダが取得できないものなのでしょうか? Webページの場合別の手法でフォルダPathを取得する形になるのでしょうか?? あわせて何かアドバイス有りましたらお願いいたします ------------------------------------------------------------- って書いてから気付きました・・・ 結局Path指定しても意味無いですよね・・・ Dim strItem As String = sender.SelectedNode.Value Dim strUrl As String = "http://localhost:2214/webpage/file/" & Mid(strItem, InStrRev(strItem, "\") + 1, Len(strItem)) 上記のように 現在のhttp://localhostのポート番号からを直接指定しなおして実行してみました すると下記エラーメッセージが表示されました URI フォーマットはサポートされていません。 このエラーについてはコピーする方法が間違っているのかと思いこれから、サーバーへのファイルアップロード方法について調べてみようと思います 取り急ぎ訂正させていただきます。 [ メッセージ編集済み 編集者: エイジ 編集日時 2008-07-18 10:18 ] |
|
投稿日時: 2008-07-18 16:16
機能的には下記コードで実現させる事が出来ました
Protected Sub TreeView1_SelectedNodeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TreeView1.SelectedNodeChanged Try Dim strItem As String = sender.SelectedNode.Value If InStr(strItem, ".") <> 0 Then Dim strUrl As String = "http://localhost:2214/file/" & Mid(strItem, InStrRev(strItem, "\") + 1, Len(strItem)) Dim strServerPath As String = Directory.GetCurrentDirectory & "\file\" & Mid(strItem, InStrRev(strItem, "\") + 1, Len(strItem)) System.IO.File.Copy(strItem, strServerPath) Dim str As String = "<SCRIPT LANGUAGE='javascript'>" str &= "var objWindow = window.open('" & URL & "','',' _ toolbar=no,location=no,status=no,directories=no,menubar=no,scrollbars=yes,resizable=no');" str &= "objWindow.focus();" str &= "</SCRIPT>" page.ClientScript.RegisterStartupScript(page.GetType, "OpenNewWindow", str) End If Catch ex As Exception End Try End Sub ただ1つ思ったのが System.IO.File.Copy(strItem, strServerPath) このコードでサーバー側にファイルをコピーする事が出来るのかと言う点です これはローカルの実行環境だから上手く動作してるだけなんじゃないかと言うのが心配なんですが、現在サーバーに上げてのテスト環境が作れず確証が得られない状態です 来週頭にはサーバーに上げて実行しテストすることが出来るのですが それまでに何かわかることがありましたら引き続きアドバイスお願いいたします |
|
投稿日時: 2008-07-18 23:42
Server.MapPath
とか? |
|
投稿日時: 2008-07-19 09:58
ぴあちゃんさんありがとうございます
Server.MapPathについてしらべてみました Server.MapPathと言うのは wwwサービスの中にすでにファイルの物理Pathを取得するもとという認識で間違いないですよね? ファイル自体はサーバー側のローカルフォルダの任意の場所にあるため wwwサービスの中に存在しているわけでなく その為、TreeViewで指定されたファイルをwwwサービスの中にコピーしそれを指定すると言う手法をとって見ています まとめると 1.IEで開くため ファイルのURLを取得したい 2.ファイル自体はTreeViewコントロールを使用しサーバー側の任意のフォルダにある 3.その為wwwサービス内にない可能性があるので wwwサービス内の指定したフォルダにファイルをコピーしURLで指定できるようにする 上記3を実現させるために System.IO.File.Copy(対象ファイルの物理パス, wwwサービス内の指定ファイルの物理パス) と言う形で、ファイルをwwwサービス内へとコピーする そうすることでURLが決まるので、そのURLを指定する という手法を取っています System.IO.File.Copy(対象ファイルの物理パス, wwwサービス内の指定ファイルの物理パス) と言うのが本番で使用できるのかと言うのが気にかかっていましたが よく考えれば、サーバー側PCのローカルフォルダから、サーバー側のPCのローカルフォルダへコピーするだけなので使用できそうなきがしてきました(笑) まぁそれは週明けテストしてみないといけませんが・・^^; ですので、Server.MapPathを使用して物理Pathを取得というのは無くても ファイルの物理パス自体はTreeViewコントロールから指定され取得するので問題ないと思われます しかしServer.MapPath自体を知らなかったので勉強になりました ありがとうございました! |
1