まず、クライアントに返す XML ファイル (getfolder.asp) を生成するプログラムをサーバー側で作成します。
<%
陳林章著、2003-4-20
' 転載する場合は出典を示し、この著作権情報を保持してください
response.write "<?xml version=""1.0"" encoding=""GB2312""?>"&chr(13)
response.write "<メディアファイル>"&chr(13)
フォルダー=リクエスト("フォルダー")
フォルダー = "/" の場合
フォルダ=""
終了する場合
ディムカウント
カウント=0
フォルダー=置換(フォルダー,"..","")
basefolder="../media/"'ベース フォルダー パス
newfolder=ベースフォルダ&フォルダ
Set fso =server.CreateObject("Scripting.FileSystemObject")
set f=fso.getfolder(server.mappath(newfolder))
sf=f.subfolders を設定します
sf 内の各 fd について、指定されたパスの下にあるフォルダーのリストを返します
response.write "<ファイル>"&chr(13)
response.write "<ftype>フォルダ</ftype>"&chr(13)
response.write "<fname>"&fd.name&"</fname>"&chr(13)
応答.write "</file>"&chr(13)
カウント=カウント+1
次
sf=何も設定しない
ff=f.ファイルを設定します
ff の各 fi に対して
fname=fi.name
if instr("asf,wma,wmv",lcase(mid(fname,instrrev(fname,".")+1)))>0 then'ソース コードの漏洩を防ぐために、返されるファイルの種類を設定します
response.write "<ファイル>"&chr(13)
response.write "<ftype>ファイル</ftype>"&chr(13)
response.write "<fname>"&fname&"</fname>"&chr(13)
応答.write "</file>"&chr(13)
カウント=カウント+1
終了する場合
次
'ディレクトリにファイルがない場合は、空の要素を送信します
count=0 の場合
response.write "<ファイル>"&chr(13)
response.write "<ftype>empty</ftype>"&chr(13)
response.write "<fname>0</fname>"&chr(13)
応答.write "</file>"&chr(13)
終了する場合
応答.write "</メディアファイル>"
ff=何も設定しない
f=何も設定しない
fso=何も設定しない
%>
以下はクライアントJS(selectfile.asp)の動作です。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<頭>
<TITLE> ビデオ ファイルを選択してください</TITLE>
<スタイル>
td{font-size:9pt}
選択{幅:210}
.s2{幅:250}
</スタイル>
<スクリプト言語="JavaScript">
<!--
/*陳林章著、2003-4-20
転載する場合は出典を示し、この著作権情報を保持してください*/
//画像をプリロードしてください
var imgback = 新しい画像();
imgback.src = "images/arrow.gif";
var imgbackgray = 新しい画像();
imgbackgray.src = "images/grayarrow.gif";
var imgfolder = 新しい画像();
imgfolder.src = "images/folder.gif";
var imggrayfolder = 新しい画像();
imggrayfolder.src = "images/grayfolder.gif";
//履歴配列スタック
var arrhistory=新しい配列();
ヴァルヒシ=0;
// 返されるファイル名を決定するために使用されます
関数チェック()
{
if (document.all.filename.value=="")
{
alert("最初にファイルを選択してください");
false を返します。
}
それ以外
{
window.returnValue =document.f1.folder.value+document.all.filename.value;
window.close();
}
}
//XMLファイルの内容を取得する
関数 getuserlist(url)
{ var oXMLDoc = 新しい ActiveXObject('MSXML');
oXMLDoc.url = URL;
var ooRoot=oXMLDoc.root;
ooRoot を返します。
}
// ファイルが選択されている場合、この値をテキスト ボックスに返します
関数追加ファイル(txt)
{
document.all.filename.value=txt;
}
var first=1;//グローバル変数
関数を定義 userlist(folders,ti)//選択されたボックスをリストします
{document.f1.folder.value=フォルダー;
filebox.document.body.innerHTML="ファイルを読み込んでいます。お待ちください...";
var strshow="";
var timeoutid=null;
var newfolder="";
var arrfolder=新しい配列();
var arrff=新しい配列();
var ブランクstr="";
var oItem;
//履歴ステータスを決定する
ヒシ+=ティ;
arrhistory[hisi]=フォルダー;
if (ヒシ==0)
{
arrow.innerHTML="<img src="images/grayarrow.gif">";
}
それ以外
{
arrow.innerHTML="<img src="images/arrow.gif" border=0 style="cursor:hand" onclick="userlist('"+arrhistory[hisi-1]+"',- 1)" onmouseover="this.src='images/arrow_over.gif'" onmouseout="this.src='images/arrow.gif'">";
}
// 現在のフォルダーを決定する
if (document.f1.folder.value=="")
{
folderid.innerHTML="<img src="images/grayfolder.gif">"
}
それ以外
{ニュースフォルダー=チェックフォルダー(ドキュメント.f1.フォルダー.値)
folderid.innerHTML="<img src="images/folder.gif" border=0 style="cursor:hand" onclick="userlist('"+newsfolder+"',1)" onmouseover= "this.src='images/folder_over.gif'" onmouseout="this.src='images/folder.gif'">"
}
//ドロップダウンボックスに値を割り当てます
document.all.select.options.length=0;
新しいフォルダー=フォルダー;
フォルダstr=""
var _obj=document.all.select;
var _o=document.createElement("オプション");
_o.text="フォルダーを選択";
_o.value="";
_obj.add(_o);
if (新しいフォルダー!="")
{arrfolder=newfolder.split("/")
for(var i=0;i<arrfolder.length-1;i++)
{blankstr+=" ";
フォルダーstr+=arrfolder[i]+"/";
_o=document.createElement("オプション");
_o.text=blankstr+arrfolder[i];
_o.value=フォルダ文字列;
_obj.add(_o);
}
}
document.all.select.options[document.all.select.options.length-1].selected=true;
url="getfolder.asp.gl?folder="+フォルダ;
oRoot=getuserlist(url)
strshow="<テーブルクラス=ファイルセルスペース=0セルパディング=0>";
len=oRoot.children.length;
if (レン==1)
{oItem = oRoot.children.item(0);
if(oItem.children.item(0).text=="空")
strshow="これ以上ファイルとフォルダーはありません";
それ以外
{
if(oItem.children.item(0).text=="フォルダ")
{
strshow+="<tr><td><A href="javascript:parent.userlist('"+folders+oItem.children.item(1).text+"/"+"',1)"><img src="images/mediafolder.gif" border=0 >"+oItem.children.item(1).text+"</A></td></tr>";
}
それ以外
{
strshow+="<tr><td><a href="javascript:parent.addfile('"+oItem.children.item(1).text+"')" ><img src="images/mediafile. gif" border=0>"+oItem.children.item(1).text+"</A></td></tr>";
}
}
strshow+="</テーブル>"
}
それ以外{
// データをスタックにプッシュする
for(i=0;i<len;i++)
{ oItem = oRoot.children.item(i);
if(oItem.children.item(0).text=="フォルダ")
{
arrff[i]="<A href="javascript:parent.userlist('"+folders+oItem.children.item(1).text+"/"+"',1)"><img src= "images/mediafolder.gif" border=0>"+oItem.children.item(1).text+"</A>";
}
それ以外
{
arrff[i]="<A href="javascript:parent.addfile('"+oItem.children.item(1).text+"')"><img src="images/mediafile.gif" border=0 height=12>"+oItem.children.item(1).text+"</A>";
}
}
//出力する列数を取得する
if (len<=6)
{x=1;
y=6;}
それ以外
{x=長さ/6;
y=6;}
for(var i=0;i<y;i++)
{strshow+="<tr>"
for(var j=0;j<x;j++)
{ponits=j*y+i;
if (ポニッツ>=レン)
{
strshow+="<td> </td>";
}
それ以外
{
strshow+="<td>"+arrff[ponits]+"</td>";
}
}
strshow+="</tr>"
}
strshow+="</テーブル>"
}
filebox.document.body.innerHTML=strshow;
}
//-->
</スクリプト>
<script LANGUAGE="vbscript">
関数 checkfolder(folderstr)
if (folderstr="" または instr(folderstr,"/")=instrrev(folderstr,"/")) then
チェックフォルダー=""
それ以外
nfolder=left(folderstr,len(folderstr)-1)
checkfolder=left(nfolder,instrrev(nfolder,"/"))
終了する場合
終了関数
</script>
</HEAD>
<BODY style="margin:0" bgColor=menu onload="javascript:userlist('',0)">
<テーブル幅="443" ボーダー="0" セルスペース="0">
<tr>
<td height="36"><テーブル幅="409" border="0">
<tr>
<td width="73" align="right">検索範囲 (<u>I</u>):</td>
<td width="214"><select name="select" id="select" size="1" onchange="javascript:userlist(this.value,1);">
</select></td>
<td width="22" valign="baseline" id="arrow" align=right></td>
<td width="20" valign="middle" id="folderid"></td>
<td width="20" align="left"><img src="images/md.gif" width="16" height="15"></td>
<td width="28" align="left"><img src="images/viewtype.gif" width="23" height="14"></td>
</tr>
</table></td>
</tr>
<tr>
<td height="120"><テーブル幅="100%" 高さ="100%" border="0">
<tr>
<td width="9"> </td>
<td>
<iframe src="blank.htm" width=415 height=120 id="filebox"></iframe></td>
<td width="13"> </td>
</tr>
</table></td>
</tr>
<tr>
<td height="60"><テーブル幅="100%" border="0">
<FORM METHOD=POST ACTION="" name="f1">
<input type="hidden" name="folder" value="">
<tr>
<td width="85" align="right">ファイル名 (<u>N</u>): </td>
<td width="254"><input type="text" id="filename" size="34"></td>
<td><button onclick="javascript:return check()"> 開く (<u>O</U>)</button></td>
</tr>
</FORM>
<tr>
<td align="right">ファイルの種類 (<u>T</u>):</td>
<td><select name="select2" class=s2>
<オプション>ストリーミング メディア ファイル (*.asf、*.wmv、*.wma)</option>
</select></td>
<td><input type="button" name="送信" value=" キャンセル " onclick="window.close();"></td>
</tr>
</table></td>
</tr>
</テーブル>
</BODY>
</HTML>
ファイルとフォルダーの表示スタイルを定義するために使用される小さなファイルblank.htmもあります。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<頭>
<TITLE> 新しいドキュメント </TITLE>
<スタイル>
td{font-size:9pt}
本文{font-size:9pt}
.file A{COLOR: #000000; TEXT-DECORATION: none;font-size:9pt}
.file A:visited{COLOR: #000000; TEXT-DECORATION: none;font-size:9pt}
.file A:hover {COLOR: #000000; TEXT-DECORATION: none;font-size:9pt}
</スタイル>
</HEAD>
<BODY style="margin: 0pt">
</BODY>
</HTML>
呼び出すときは、次の関数を使用して、実際のファイルとまったく同じようにサーバー側でファイルを選択する効果を実現します。
関数選択ファイル()
{
var arr = showModalDialog("selectfile.asp?temp="+Math.random(), "", "dialogWidth:453px; DialogHeight:252px; status:0;help:1");
if (arr != null)
{
返却先
}
}
この関数によって最後に返されるのは、選択されたファイル名です。ファイル選択ボックスから関数で使用されるいくつかの画像を取得できます。
使用中にさまざまな未知のバグに遭遇する可能性があると予想されます。電子メール: [email protected] までご連絡ください。