Поиск

Вход на сайт

Файлы

  • Игры 240х400 - Сборник из 72 игр для сенсорных телефонов
  • Windows 7 активатор
  • WallHack для Call of Duty 4 Modern Warfare[multiplayer]
  • Обои для Samsung s5230 720х400
  • Kassy 0.3 + crack (печать товарных чеков)
  • Jimm 0.6.0
  • Mail Agent на телефон (jar)
  • Механоиды гонки на выживание nocd
  • Читы CS 1.6 - Wallhack v4
  • Tequilacat Book Reader 2.2.8
  • Обои для Samsung s5230 720х400
  • Обои для Samsung s5230 720х400
  • l4d_update_1013_to_1014
  • Windows 7 Activator Pack
  • Сборник виджетов для SAMSUNG S5230
  • Шпаргалка по русскому языку
  • Ad Muncher 4.9 Build 31235
  • TMS Component Pack v5.4.2.0 (C++Builder, Delphi) Full Source
  • Архив файлов для Guitar Pro
  • Шпаргалка по математике
  • KKiller v3.4.4
  • Решатель транспортных задач
  • Radmin_3.3_+_Key
  • Sound_Forge_9.0a + crack
  • GPU-Z 0.3.8 (RUS/2009)
  • Чит для Battlefield 2 || ArtificialAiming Radar v2.6
  • Игры для Nokia 5800, N97, 5230, 5530, X6 - Игры для смартфонов серии Nokia Touch, с сенсорным экраном 360 x 640 (S60 5th Edition)
  • Читы CS 1.6 - BadBoy v5.0
  • Читы для lineage 2
  • Tom Clancy's Splinter Cell: Conviction Multiplayer patch
  • Каталог статей

    Главная » Статьи » Веб программирование » ASP/ASP.NET

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

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

    Автор: Христофоров Юрий
    jyura@mail.ru
    Личная страница: http://activex.narod.ru

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

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


    Рис. 1.

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

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

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

    Находимся в папке C:\Inetpub\wwwroot\user1\folder1\subfolder2:

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

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

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

    <%Response.Expires=0%> 'Отключаем кэширование страницы
    <HTML>
    <BODY>
    <!-Серверный сценарий a
    <%
    Dim root_folder, root_vfolder, curr_dir, curr_dir2, temp_arr
    'root_folder - переменная для хранения физического пути к корневой папке USER1
    root_folder = "c:\inetpub\wwwroot\user1"
    '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 ShowDirList(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="
    Response.Write 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="
    Response.Write 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,"\","/")
    Response.Write "/" & 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.
    Категория: ASP/ASP.NET | Добавил: _Hz_ (04.12.2009)
    Просмотров: 377 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]

    Статистика





    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0

    Ссылки

    dim-dragon.ucoz.ru