■26107 / inTopicNo.7) |
Re[4]: フォルダー内のエクセル名とそのリンクの表示方を教えてください |
□投稿者/ Jitta (518回)-(2008/10/01(Wed) 22:57:13)
|
■No26046 (あびお27 さん) に返信
参考にされたところを見ました。あまり、勧めたくないなぁ...
> 次にリンクですが、考えていらっしゃる方法では、出来ません。
これは、aspnet101 のコード例もそうなのですが、リンク先として、
ローカルドライブを指定していることを指しています。
-----このあたり-----
if right(Files(i).Name, 3) = "gif" or right(Files(i).Name, 3) = "jpg" then
txtFileList.Text += "<tr><td><img src='images/file.gif'>< a href='" & _
strDir & "/" & Files(i).Name & "' target='_blank'>" & _
Files(i).Name & "< /a></td><td valign='bottom'>" & _
Files(i).LastWriteTime & "</td></tr>"
-----
strDir は、GetFiles メソッドの先頭付近で、"d" クエリー文字列から取得しています。
"d" クエリーは、txtFileList.Text に対して、subDirs(i).Fullname を割り当てています。
このため、“サーバーとクライアントが同一端末ならば”、参照できます。
> > 参考にされた所を見ていませんが、サーバーのドライブ構成を見せるのは、感心しないなぁ...
> との事。すみません。知識不足でよく分からないのですが、
> ドライブの構成は例のコードのように表示しないほうが良いのですね?
aspnet101 にも、
「but we can't create an online example of it due to security issues.」
(セキュリティの問題があるから、オンラインの例を作成できないよ。)
と書いてあるとおりです。
ASP.NET のワーカープロセスがどの程度の権限を持っているかに依存しますが、
ローカルのファイル構成がそのまま見えてしまうため、
apnet101 のようなことをするのは、難があります。
onoさんのページでは「ダウンロードのみ」なので、リンクを作るところを説明します。
ファイルの一覧は、No26003 でされているように、「System.IO.Directory.GetFiles」で
取得します。ファイル名の取り出しには、Path.GetFileName メソッドを使います。
http://msdn.microsoft.com/ja-jp/library/system.io.path.getfilename.aspx
「後ろから、パス デリミタを探す」というのは、かまいません。
しかし、aspnet101 のように、「最後から3文字で拡張子を判定する」のは、まねてはいけません。
ここで取り出したファイル名は、aspnet101 をまねて、リンクを作ります。
-----
dim fileList as System.Text.StringBuilder = New System.Text.StringBuilder()
For Each パス名 In System.IO.Directory.GetFiles(...)
dim ファイル名 As String = System.IO.Path.GetFileName(パス名)
fileList.AddFormat("< a href=""dl.aspx?d={0}"">{0}< /a><br>", ファイル名)
Next
-----
これで、GetFiles に指定したディレクトリにあるファイルの一覧ができます。
fileList.ToString() を、Literal コントロールに設定します。
文字列連結は、非常にわかりやすいのですが、メモリをたくさん消費し、
実行速度も若干落ちるため、おすすめしません。
リクエストにクエリがくっついているときには、ダウンロードをさせます。
クエリの取り出し方、判定の仕方は、aspnet101 のページを参照してください。
ただ、上記のコードは、セキュリティ問題を含んでいます。
Windows では、ファイル名に "<" や ">" を使用することができません。
しかし、"%" や "&" は使えます。これらは適切に処理を行ってください。
"asp%20net.txt" や "asp<net>.text" といったファイル名を作って
表示させれば、何がまずいのかわかると思います。
解決方法は、onoさんのページに、ちょっと変形させて書かれています。
#####
<a></a>が入力できないので、"< a>""< /a>" と、空白を入れています。
|
|