Scan.inc
<%
«Пояснение: я впервые пишу класс приложения. Пожалуйста, сообщите мне, есть ли какие-либо несоответствия! Вопрос: 1168064
'Свойства и методы
'1. ScanType: тип сканирования. Значение по умолчанию: 1. Значения: 0 сканирует файлы и базы данных 1 сканирует файлы 2 сканирует базы данных.
'2. Conn, Table, ColImg, ColID: используются при сканировании базы данных, соответственно, строка подключения, имя таблицы, имя столбца изображения и имя столбца идентификатора, соответствующее изображению.
'3. Список: тип отображения. Значение по умолчанию: 0. Значение: 0 неверное изображение 1 сетевое изображение 2 допустимое изображение 3 все
'4. ScanText: тип отсканированного изображения. Значение по умолчанию: Asp/html/htm. Значение: расширение файла, разделенное знаком «/».
'5. Путь: Отсканированный путь: По умолчанию используется корневой каталог веб-сайта, используйте относительные пути. Например "/dsj"
'6. Сканировать(): метод. Сканировать в соответствии с настройками
'7. Файл: сохранить всю отсканированную информацию. Вызывается после метода Scan()
'8. Папки: количество просканированных папок.
'9. Файлы: количество отсканированных файлов.
'10. TotalSize: общий размер каталога. G, M, B отображаются автоматически.
'11. Изображения: количество изображений в отсканированном файле.
'12. Существует: количество отказов.
'13 г. DbImg: Количество изображений в базе данных.
'14. TotalImg: Количество отсканированных изображений.
'15. RunTime: время процесса сканирования. Единица миллисекунда
'16. Что касается использования файла:
' Для каждого Fn в ObjName.file …… Далее
'Fn.FileName: имя изображения, включая путь
' Fn.Belong: файл или база данных, в которой находится изображение (файлы разделяются знаком "|")
'Fn.Exists: действительно ли оно. 0 означает недействительный, 1 означает действительный, 1 означает нелокальный путь и не может быть оценен.
Опция явная
КлассMCScanImg
dim Файл, ScanType, Conn, Таблица, ColId, ColImg, FSO, Путь, Список, ScanText, Пространство, Версия
dim Папки, файлы, TotalSize, изображения, существует, sFiles, Start, EndT, RunTime, DbImg, TotalImg, фильтр
Частный подкласс_инициализировать
Установить файл = Server.Createobject("Scripting.Dictionary")
Установите FSO = CreateObject("Scripting.FileSystemObject")
Тип сканирования=1
Конн=""
Таблица=""
КолИмг=""
КолИд=""
Путь="/"
sPath = Server.MapPath("/")
Список=0
ScanText="asp/htm/html"
Папки=0
Файлы=0
ТоталСизе=0
Изображения=0
ДбИмг=0
Существует=0
sFiles=0
Тотальное изображение=0
Старт=Таймер
Конец=Таймер
Время выполнения=0
Filter="src=(.[^>^&]*)(.gif|.jpg)"
Версия="1.00"
Завершить подчастный
подкласс_Terminate
Установить файл=Ничего
Установить FSO = Ничего
End Sub
Public Function Scan() 'Начать сканирование
если left(path,1)="/" то
путь=Spath&Replace(path,"/","")
еще
Путь=Spath&""&Replace(path,"/","")
конец, если
Если ScanType=1, то
Файл сканирования (путь)
ИначеЕсли ScanType=2 Тогда
СканДб()
Еще
СканФайл(Путь)
СканДб()
Конец, если
КонецT=таймер
RunTime=Номерформата(EndT-Start)*1000
TotalSize=shb(TotalSize)
TotalImg=DbImg+Изображения
End Function
Private Sub ScanDB() 'Сканирование базы данных. Путь здесь определить сложно, измените его в InsDb (после того, как AddNum=0).
Тусклый Rs, RetStr, ReBel, SQL
SQL="Выбрать "&ColID&","&ColIMG&" Из "&Table&" Упорядочить по "&ColID&" DESC"
'При ошибке возобновить далее
Если Conn ="" ИЛИ Таблица="" ИЛИ ColID="" ИЛИ ColIMG = "" Тогда
Выход из подзаголовка
Еще
Установить Rs = Server.CreateObject("ADODB.RecordSet")
Rs.Open SQL,conn,3,3
Пока не Rs.EOF
РетСтр=Рс(1)
ReBel="&ColImg&" столбец в таблице "&Table&" (ID: "&Rs(0)&")"
InsDb RetStr,ReBel,0,""
Rs.MoveNext
Венд
Rs.Закрыть
Установить Rs=Ничего
Конец, если
End Sub
Private Sub ScanFile(PathStr) 'Сканировать файл. рекурсия
Тусклый f,ff,fn,fd,fdn,RealPath,fr,fc
'Response.write PathStr&"<br>"
Установите ff = fso.getfolder(pathstr)
Установите f = ff.files
Установите fd = ff.subfolders
Если f.Count >0 Тогда
Для каждого fn в f
Файлы=Файлы+1
TotalSize=TotalSize+fn.Size
Если ChkFileName(fn.Name) Тогда
sFiles=sFiles+1
Если Right(PathStr,1) <> "" Тогда
RealPath=PathStr&""&fn.Name
Еще
RealPath=PathStr&fn.Name
Конец, если
Установите fr = FSO.OpenTextFile(RealPath,1)
fc=fr.ReadAll
'response.write RealPath&"<br>"
Фильтр RegExpTest, fc, RealPath
Конец, если
Следующий
Конец Если
Если fd.Count> 0 Тогда
Для каждого fdn в fd
Папки=Папки+1
низкая температура
если верно (PathStr,1) <> "", то
temp=PathStr&""&fdn.Name
еще
temp=PathStr&fdn.Name
конец, если
СканФайл(временный)
Следующий
Конец, если
End Sub
Private Sub RegExpTest(Patrn, Strng,PathStr) 'Найти изображения
Dim RegEx, Match, Matches,Chk,ReImg,RetStr,ReBel,TheFile
Установить RegEx = Новое регулярное выражение
RegEx.Pattern = Шаблон
RegEx.IgnoreCase = Истина
RegEx.Global = Истина
Установить совпадения = RegEx.Execute(Strng)
За каждый матч в матчах
RetStr = Заменить(Match.Value, "src=","")
RetStr = Заменить(RetStr,"'","")
RetStr = Заменить(RetStr,"""","")
Чк = 0
ReBel=GetFn(PathStr)
InsDb RetStr,ReBel,1,PathStr
Следующий
End Sub
Private Function GetExt(FullPath) 'Получите расширение файла, используемое для определения того, является ли он сканируемым типом файла.
Тусклая температура
Если FullPath <> "" Тогда
Temp = Mid(FullPath,InStrRev(FullPath, "")+1)
Если InStr(Temp,".")>0 Тогда
GetExt=Mid(Temp,InStrRev(Temp, ".")+1)
Еще
GetExt=Температура
Конец, если
Еще
ПолучитьExt = ""
Конец, если
Конечная функция
Частная функция ChkFileName(Str) 'Определяет, является ли файл того типа, который необходимо сканировать.
Дим ар, я, фн
fn=GetExt(строка)
ar=Split(СканТекст,"/")
ChkFileName=False
Для i=0 To ubound(ar)
Если lCase(fn) =lCase(Trim(ar(i))) Тогда
ChkFileName=Истина
Выход из функции
Конец, если
Следующий
Конечная функция
Частная функция shb(n) 'Отображение количества байтов
Если n<1024 Тогда
шб = n&"байт"
ИначеЕсли n>1024 и n<1024*1024 Тогда
шб = номер формата (n/1024,2)&"K"
ИначеЕсли n>=1024*1024 и n <1024*1024*1024 Тогда
шб = номер формата(n/(1024*1024),2)&"M"
Еще
шб =номерформата(n/(1024*1024*1024),2)&"G"
Конец, если
End Function
Private Sub InsDb(RetStr,ReBel,AddNum,PathStr) 'Проанализируйте, является ли изображение допустимым, и добавьте его в объект словаря
дим chk,ReImg,TheFile
Если InStr(RetStr," http://")>0 ИЛИ Instr(RetStr," ftp://")>0 Тогда
ReImg=RetStr
Чк=-1
Еще
RetStr = Заменить(RetStr,"/","")
Если (Left(RetStr,1) = "" ) Тогда
RetStr=SPath&Retstr
ElseIf Left(RetStr,3) = ".." Тогда
низкая температура
темп = GetPath (PathStr)
Do Until Left(RetStr,3) <> ".." 'Обработка относительных путей
Temp = Fso.GetParentFolderName(Temp)
RetStr=Средний(RetStr,4,len(RetStr)-3)
Петля
RetStr=Темп&""&RetStr
Еще
Если AddNum=0 Тогда
если left(RetStr,1)="", то
RetStr=Путь&""&Retstr
Еще
RetStr=путь&Retstr
Конец, если
еще
RetStr=getpath(Pathstr)&RetStr
Конец ЕСЛИ
Конец Если
Если FSO.FileExists(RetStr) Тогда
Чк=1
Конец, если
ReImg=GetFn(РетСтр)
Конец, если
Если Chk=0 Тогда
Существует=Существует+1
Конец, если
Если File.Exists(ReImg), то
Установите TheFile=File.Item(ReImg)
Если TheFile.Belong <> ReBel Тогда
TheFile.Belong=TheFile.Belong&"|"&Rebel
Конец, если
Еще
Если (Список=0 И Chk =0) ИЛИ (Список=1 И Chk=-1) Или (Список=2 И Chk=1 ) Или Список=3 Тогда
Установите TheFile= New FileInfo
TheFile.FileName=ReImg
TheFile.Belong=РеБел
TheFile.Exists=Chk
Файл.Добавить ReImg,TheFile
Выберите тип сканирования дела
Случай 1 Изображения=Изображения+1
Случай 2 DbImg = DbImg+1
Другое дело
Если АддНум = 0 Тогда
ДбИмг = ДбИмг+1
Еще
Изображения=Изображения+1
Конец, если
Конец выбора
Конец, если
Конец, если
End Sub
Private Function GetPath(Str) 'Получить путь к файлу
'response.write str&"<br>"
Тусклая температура, EndB
Temp=Replace(Str,"/","")
EndB=ИнстрРев(Темп,"")
Если EndB = 0 Тогда
GetPath=SPath
Еще
GetPath=Влево(Темп,КонецБ)
Конец, если
'response.write GetPath&"<BR>"
Конечная функция
Частная функция GetFn(Str) 'Получаем относительный путь к файлу
Тусклая температура
Температура=Str
'response.write temp&"<br>"
Temp=Replace(Str,SPath,"")
Temp=Replace(Temp,"","/")
GetFn=Темп.
Конечная функция
Конечный класс
Class FileInfo
Dim FileName, Belong, Exists
Private Sub Class_Initialize
ИмяФайла=""
Принадлежать=""
Существует=""
Конечный
подконечный класс
%>
Примеры применения
< %@LANGUAGE="VBSCRIPT " CODEPAGE="936"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " http://www.w3.org/TR/html4/loose.dtd ">
<%
%>
<html>
<голова>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Документ без названия</title>
<link rel="stylesheet" href="css.css">
</head>
<тело>
<form name="form1" Method="post" action="scan.asp">
<table width="60%" border="0" align="center" cellpacing="1" bgcolor="#003366">
<tr bgcolor="#FFFFFF">
<td height="30" colspan="2" bgcolor="#00CCFF"><div align="center">Сканировать изображение</div></td>
</tr>
<tr bgcolor="#FFFFFF">
<td width="26%" height="20"><div align="right">Папка сканирования:</div></td>
<td width="74%" height="20"><select name="Путь" id="Путь">
<option value="/">/</option>
<%
дим fso,f,fd,p
p=server.MapPath("/")
set fso=Server.CreateObject("Scripting.FileSystemObject")
функция showpath(str)
установить f=fso.getfolder(str)
установить fd=f.подпапки
для каждого fds в fd
Response.Write "<option value="&Replace(Replace(fds,p,""),"","/")&">"&Replace(Replace(fds,p,""),""," /")&"</option>"
установите ff=fso.getfolder(fds)
установить ffd=ff.подпапки
если ffd.count>0, то
путь показа (fds)
конец, если
следующий
конечная функция
показатьпуть(p)%>
</select></td>
</tr>
<tr bgcolor="#FFFFFF">
<td height="20"><div align="right">Тип сканирования: </div></td>
<td height="20"><input type="radio" name="SType" value="0">
все
<input name="SType" type="radio" value="1" проверено>
Сканировать файлы
<input type="radio" name="SType" value="2">
Сканировать базу данных</td>
</tr>
<tr bgcolor="#FFFFFF">
<td height="20"><div align="right">Тип отображения:</div></td>
<td height="20"><input name="LType" type="radio" value="0" проверено>
Неверный
<input type="radio" name="LType" value="1">
сетевой путь
<input type="radio" name="LType" value="2">
эффективный
<input type="radio" name="LType" value="3">
Все</td>
</tr>
<tr bgcolor="#FFFFFF">
<td height="20"><div align="right">Тип файла: </div></td>
<td height="20"><input name="Ext" type="checkbox" id="Ext" value="asp" проверено>
Асп
<input name="Ext" type="checkbox" id="Ext" value="htm" проверено>
Хм
<input name="Ext" type="checkbox" id="Ext" value="html" проверено>
HTML
<input name="Ext" type="checkbox" id="Ext" value="inc" проверено>
Инк</td>
</tr>
<tr bgcolor="#FFFFFF">
<td height="20"><div align="right">База данных:</div></td>
<td height="20">Таблица:
<input name="Tab" type="text" id="Tab" size="5" class="allinput">
Столбец идентификатора изображения:
<input name="ColID" type="text" id="ColID" size="5" class="allinput">
Столбец пути к изображению:
<input name="ColImg" type="text" id="ColImg" size="5" class="allinput"> </td>
</tr>
<tr bgcolor="#FFFFFF">
<td height="40" colspan="2"><div align="center">
<input type="submit" value="Начать сканирование" class="allinput">
</div></td>
</tr>
</таблица>
</форма>
</тело>
</html>
scan.asp
<!--#include file="scan.inc"-->
<%
дим мкс, фн, фб
%>
<link href="css.css" rel="таблица стилей">
<table width="70%" border="0" align="center" cellpadding="5" cellpacing="1" bgcolor="#003366">
<tr bgcolor="#AAAAFF">
<td width="30%" height="30">Название изображения</td>
<td width="39%" height="30">Местоположение</td>
<td width="31%" height="30">действительно</td>
</tr>
<%
Функция GetVar (ID, по умолчанию)
GetVar = По умолчанию
Если Запрос(ID) <> "" Тогда
GetVar = Запрос (ID)
Конец ЕСЛИ
Конечная функция
Dim SType, LType, Path, Ext, Conn, Tab, ColID, ColImg
SType=GetVar("SType",1)
LType=GetVar("LType",3)
Путь=GetVar("Путь","/")
Ext = Trim(Replace(GetVar("Ext","htm,html,asp,inc"),", ","/"))
Conn=GetVar("Conn","")
Tab=GetVar("Tab","")
ColID=GetVar("ColID","")
ColImg=GetVar("ColImg","")
Conn="Provider=Microsoft.Jet.OLEDB.4.0;Источник данных="&Server.MapPath("/db1.mdb")
установить mcs= новый mcscanimg
mcs.ScanType=SТип
mcs.list=LТип
mcs.ScanText=Ext
mcs.conn=Конн
mcs.Path=Путь
mcs.table=Вкладка
mcs.ColID=ColID
mcs.ColImg=ColImg
mcs.scan()
для каждого fn в mcs.file
установить fb=mcs.file(fn)
%>
<tr bgcolor="#FFFFFF">
<td valign="top"><%=fb.filename%></td>
<td><%=Replace(fb.Belong,"|","<br>")%></td>
<td><%
если fb.Exists=1, то
ответ. Напишите «действительный путь»
иначе если fb.exists=0 тогда
ответ. Напишите «Неверный путь».
еще
ответ. Напишите «нелокальный путь»
конец, если
%></тд>
</tr>
<%
следующий
%>
<tr bgcolor="#FFFFFF">
<td colspan="3">Всего отсканированных файлов: <%=mcs.files%>; Отсканированных папок: <%=mcs.folders%>; Общий размер: <%=mcs.totalsize%><br>Количество отсканированных изображений : <%=mcs.images&"; Количество образов базы данных: "&mcs.dbimg&"; Общее количество образов: "&mcs.TotalImg%>; Количество сбоев: <%=mcs.exists%><br>Время работы: <%=mcs.runtime%>миллисекунды</td>
</tr>
</таблица>
<%set mcs=ничего%>