РефератыИнформатикаПрПредставление в Internet содержимого каталога средствами ASP

Представление в Internet содержимого каталога средствами ASP

Представление в Internet содержимого каталога средствами ASP


Христофоров Юрий


В этой статье я на примере расскажу, как используя ASP (Active Server Pages) можно построить содержимое каталога Web аналогично тому, как это выглядит на FTP сервере.


Постановка задачи: На Web-сервере есть каталог, например: C:InetPubwwwrootuser1. Пусть данный каталог имеет несколько вложенных каталогов и набор файлов в этих каталогах. Примерная структура папок представлена на Рис. 1.


Рис. 1.


В каждом из представленных на рисунке каталогах может находиться неограниченное количество файлов, либо некоторые из каталогов могут быть пустыми. Необходимо представить содержимое папки user1 на Web-странице в дружественном для пользователя виде.


Интересной особенностью скрипта является то, что применяя страницу с фреймами (кадрами), можно построить меню пользователя.


Результат должен выглядеть примерно следующим образом:


Находимся в папке C:Inetpubwwwrootuser1folder1subfolder2:



На данном скриншоте показан пример меню. Страница menu.htm разделена на два фрейма. В левом фрейме находится файл list_files.asp, а правый фрейм используется для отображения файлов, ссылки на которые находятся в левом фрейме. В левом фрейме можно свободно перемещаться по папкам. Т.о. можно организовать меню пользователя.


Решение: Ключ к решению данной задачи - это использование MicrosoftR Scripting Library. Нас будет интересовать такой объект этой библиотеки, как FileSystemObject. FileSystemObject предоставляет объектную модель доступа к файловой системе. Далее, пользуясь средствами языка написания сценариев VBScript, выполняемого на Web-сервере, можно написать одну ASP-страницу, которая будет выполнять всю работу. Итак, приступим.


Листинг файла list_files.asp:




<%Response.Expires=0%> 'Отключаем кэширование страницы


<HTML>


<BODY>


<!-Серверныйсценарий


<%


Dim root_folder, root_vfolder, curr_dir, curr_dir2, temp_arr


'root_folder - переменная для хранения физического пути к корневой папке USER1


root_folder = "c:inetpubwwwrootuser1"


'root_vfolder - переменная для хранения виртуального пути к папке USER1


'localhost - имя Вашего сервера


root_vfolder = "http://localhost/user1"


'curr_dir2 - имя текущей (активной) папки


curr_dir2 = Request.QueryString("dir") 'Имяполучаемиз URL


'curr_dir - полный физический путь к текущей папке. Получается конкатенацией строк, 'содержащихся в переменных root_folder и curr_dir2.


curr_dir = root_folder & curr_dir2


'temp_arr - временный массив


'Получаем массив, содержащий названия каталогов текущей папки.


temp_arr = ShowDirList(curr_dir)


'Сортируеммассивстрок


temp_arr = SortStr(temp_arr)


%>


<table border=0>


<%


'Вызов процедуры, осуществляющей вывод названий подкаталогов текущего каталога.


Call Main_Print(temp_arr,1)


'Получаем массив, содержащий имена файлов текущей папки.


temp_arr = ShowFilesList(curr_dir)


'Сортируеммассивстрок


temp_arr = SortStr(temp_arr)


'Вызов процедуры, осуществляющей вывод имен файлов текущего каталога.


Call Main_Print(temp_arr,0)


%>


</table>


<%


'Очистка содержимого массива


Erase temp_arr



Далее следует текст функций и процедур, используемых в сценарии.


Функции: ShowFilesList - возвращает массив, содержащий имена файлов текущей папки.


ShowDirList - возвращает массив, содержащий названия каталогов текущей папки.


SortStr - сортирует массив строк.


Процедура: Main_Print - осуществляет вывод в HTML-формате содержимое текущего каталога.


Продолжение листинга файла list_files.asp:




Function ShowFilesList(folder)


Dim fs, f, f1, fc, i


'Определяем динамический массив для хранения имен файлов


ReDim farr(0)


'СоздаемобъектFileSystemObject


Set fs = CreateObject("Scripting.FileSystemObject")


Set f = fs.GetFolder(folder)


Set fc = f.Files


i=0


'В цикле заполняем массив именами файлов текущей папки


For Each f1 In fc


farr(i) = LCase(CStr(f1.Name)) 'Преобразуем имя к нижнему регистру символов


i = i + 1


'Увеличениеразмерамассива


ReDim Preserve farr(i)


Next


'Возвращаемрезультат


ShowFilesList = farr


End Function





Function ShowDirLis

t(folder)


Dim fs, f, f1, fc, i


'Определяем динамический массив для хранения названий каталогов


ReDim dirarr(0)


Set fs = CreateObject("Scripting.FileSystemObject")


Set f = fs.GetFolder(folder)


Set fc = f.SubFolders


i=0


'В цикле заполняем массив именами каталогов текущей папки


For Each f1 In fc


dirarr(i) = LCase(CStr(f1.Name))


i = i + 1


ReDim Preserve dirarr(i)


Next


'Возвращаемрезультат


ShowDirList = dirarr


End Function





Function SortStr(arr)


Dim t,i,j


'Сортировка методом "пузырька"


'UBound - возвращает верхний индекс массива


For j = 0 To UBound(arr)-1


For i = j + 1 To UBound(arr)-1


'StrComp - сравнивает две строки


'Возвращает "-1", если строка1 < строка2; "0", если строка1=строка2; "1", если строка1 >


' строка2.


If StrComp(CStr(arr(i)), CStr(arr(j)), vbTextCompare) < 0 Then


t = arr(j)


arr(j) = arr(i)


arr(i) = t


End If


Next


Next


'Возвращаемрезультат


SortStr = arr


End Function





Sub Main_Print(arr,flag)


'flag = 1 - вывод для каталогов


'flag = 0 - вывод для файлов


Dim i,k,tmp


i = 0


Select Case flag


Case 1


'Если находимся в подкаталоге, то надо предусмотреть возможность вернуться


'на уровень выше


If curr_dir2 <> "" Then


'Ищем последнее вхождение символа разделителя каталогов ""


k = InStrRev(curr_dir2,"")


If k <> 0 Then


'Получаем имя каталога верхнего уровня


tmp = Mid(curr_dir2,1,k-1)


Response.Write "<tr>" 'Вывод HTML


'Для украшения используем графический файл open.gif - изображение открытой папки.


Response.Write "<td><img src='open.gif'></td>"


'Формируемссылкунаверхнийкаталог


Response.Write "<td><a href='list_files.asp?dir=" & tmp & "'>" & " .. " & "</a></td></tr>"


End If


End If


'Основной цикл вывода названий каталогов


For i = 0 To UBound(arr)-1


Response.Write "<tr>"


Response.Write "<td><img src='close.gif'></td>"


Response.Write "<td><a href=' list_files.asp?dir=" & curr_dir2 & "" & arr(i) & "'>" & arr(i) & _


"</a></td></tr>"


Next


'Выводименфайлов


Case 0


'Основной цикл вывода имен файлов


For i = 0 To UBound(arr)-1


Response.Write "<tr>"


Response.Write "<td><img src='doc.gif'></td>"


'Заменяем "" на "/" для использования в URL


'Атрибут target нужен для указания ссылки на фрейм


Response.Write "<td><a href='" & root_vfolder & Replace(curr_dir2,"","/") & "/" & arr(i) & _


"' target='main'>" & arr(i) & "</a></td></tr>"


Next


End Select


End Sub


%>


</BODY>


</HTML>



Далее необходимо написать страницу menu.htm, содержащую два фрейма, как было показано выше. Листинг приведен ниже:




<HTML>


<HEAD>


</HEAD>


<FRAMESET COLS="150,*">


<FRAME NAME="contents" SRC="list_files.asp">


<FRAME NAME="main" SRC="empty.htm">


</FRAMESET>


</HTML>



Файл empty.htm представляет собой пустой файл-заглушку для корректного отображения страницы в браузере Netscape Navigator.




<!-empty.htm 


<HTML>


</HTML>



Файлы list_files.asp, menu.htm, empty.htm необходимо поместить в каталог на Web-сервере с правом Script.


Далее в браузере набираем, например, http://localhost/scripts/menu.htm


Пример работы скрипта приведен на Рис.2.


Рис.2.


Исходный файл проекта прилагается: files.zip

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Представление в Internet содержимого каталога средствами ASP

Слов:943
Символов:10505
Размер:20.52 Кб.