<p>用XML+FSO+JS实现服务器端文件的选择</p>
<p>看了inanition的《在服务器端选择文件》一文,后发现我已经早把它作出来了,于是贴出来大家共享<br />
首先在服务器端先创建一个程序可以生成XML文件,以返回客户端,(getfolder.asp)<br />
<%<br />
'written by Linzhang Chen ,2003-4-20<br />
' 转载请注明出处和保留此版权信息<br />
response.write "<!--?xml version=""1.0"" encoding=""GB2312""?-->"&chr(13)<br />
response.write "<mediafile>"&chr(13)<br />
folders=request("folder")<br />
if folders="/" then<br />
folders=""<br />
end if<br />
dim count<br />
count=0<br />
folders=replace(folders,"..","")<br />
basefolder="../media/"'基准的文件夹路径<br />
newfolder=basefolder&folders<br />
Set fso =server.CreateObject("Scripting.FileSystemObject")<br />
set f=fso.getfolder(server.mappath(newfolder))<br />
set sf=f.subfolders<br />
for each fd in sf'返回指定路径下面的文件夹列表<br />
response.write "<file>"&chr(13)<br />
response.write "<ftype>folder</ftype>"&chr(13)<br />
response.write "<fname>"&fd.name&"</fname>"&chr(13)<br />
response.write "</file>"&chr(13)<br />
count=count+1<br />
next<br />
set sf=nothing<br />
set ff=f.Files<br />
for each fi in ff<br />
fname=fi.name<br />
if instr("asf,wma,wmv",lcase(mid(fname,instrrev(fname,".")+1)))>0 then'设定允许返回的文件类型,防止源码泄露<br />
response.write "<file>"&chr(13)<br />
response.write "<ftype>file</ftype>"&chr(13)<br />
response.write "<fname>"&fname&"</fname>"&chr(13)<br />
response.write "</file>"&chr(13)<br />
count=count+1<br />
end if<br />
next<br />
'如果该目录下没有文件,就发一个空元素<br />
if count=0 then<br />
response.write "<file>"&chr(13)<br />
response.write "<ftype>empty</ftype>"&chr(13)<br />
response.write "<fname>0</fname>"&chr(13)<br />
response.write "</file>"&chr(13)<br />
end if<br />
response.write "</mediafile>"<br />
set ff=nothing<br />
set f=nothing<br />
set fso=nothing<br />
%><br />
下面就是客户端的JS的功夫了(selectfile.asp)</p>
<p></p>
<p></p>
<p>
<p>
<p><br />
<title></title>
<br />
<style type="text/css"><br />
td{font-size:9pt}<br />
select{width:210}<br />
.s2{width:250}<br />
</style>
<br />
<script language="JavaScript"><br />
<!--<br />
/*written by Linzhang Chen ,2003-4-20 <br />
转载请注明出处和保留此版权信息 */</p>
<p>//预装载图片<br />
var imgback = new Image();<br />
imgback.src = "<a data-cke-saved-href="http://www.163design.net/a/y/images/arrow.gif" href="http://www.163design.net/a/y/images/arrow.gif">http://www.163design.net/a/y/images/arrow.gif</a>";<br />
var imgbackgray = new Image();<br />
imgbackgray.src = "images/grayarrow.gif";<br />
var imgfolder = new Image();<br />
imgfolder.src = "images/folder.gif";<br />
var imggrayfolder = new Image();<br />
imggrayfolder.src = "images/grayfolder.gif";<br />
//历史记录数组栈<br />
var arrhistory=new Array();<br />
var hisi=0;<br />
//用来确定要返回文件名<br />
function check()<br />
{<br />
if (document.all.filename.value=="")<br />
{<br />
alert("请先选择文件");<br />
return false;<br />
}<br />
else<br />
{<br />
window.returnValue =document.f1.folder.value+document.all.filename.value;<br />
window.close();<br />
}<br />
}<br />
//取得XML文件的内容<br />
function getuserlist(url)<br />
{ var oXMLDoc = new ActiveXObject('MSXML');<br />
oXMLDoc.url = url;<br />
var ooRoot=oXMLDoc.root;<br />
return ooRoot;<br />
}<br />
//当选中一个文件时,把这个值返回给文本框<br />
function addfile(txt)<br />
{<br />
document.all.filename.value=txt;<br />
}</p>
<p>var first=1;//定义一个全局变量</p>
<p>function userlist(folders,ti)//列出所选框<br />
{document.f1.folder.value=folders; <br />
filebox.document.body.innerHTML="正在加载文件,请稍侯...";<br />
var strshow="";<br />
var timeoutid=null;<br />
var newfolder="";<br />
var arrfolder=new Array();<br />
var arrff=new Array();<br />
var blankstr="";<br />
var oItem;<br />
//确定历史状态<br />
hisi+=ti;<br />
arrhistory[hisi]=folders;<br />
if (hisi==0)<br />
{<br />
arrow.innerHTML="<img data-cke-saved-src=http://www.163design.net/ src=http://www.163design.net/"images/grayarrow.gif">";<br />
}<br />
else<br />
{<br />
arrow.innerHTML="<img data-cke-saved-src=http://www.163design.net/ src=http://www.163design.net/"<a data-cke-saved-href="http://www.163design.net/a/y/images/arrow.gif" href="http://www.163design.net/a/y/images/arrow.gif">http://www.163design.net/a/y/images/arrow.gif</a>" border=0 onclick="userlist('"+arrhistory[hisi-1]+"',-1)" onmouseover="this.src='http://www.163design.net/a/y/images/arrow_over.gif'" onmouseout="this.src='http://www.163design.net/a/y/images/arrow.gif'">";<br />
}<br />
//确定当前的文件夹<br />
if (document.f1.folder.value=="")<br />
{<br />
folderid.innerHTML="<img data-cke-saved-src=http://www.163design.net/ src=http://www.163design.net/"images/grayfolder.gif">"<br />
}</p></script>
</p>
</p>
</p>
<p></p>