229 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			229 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | <%@ CODEPAGE=65001 %> | |||
|  | <% Option Explicit %> | |||
|  | <% Response.CodePage=65001 %> | |||
|  | <% Response.Charset="UTF-8" %> | |||
|  | <!--#include file="JSON_2.0.4.asp"--> | |||
|  | <% | |||
|  | 
 | |||
|  | ' KindEditor ASP | |||
|  | ' | |||
|  | ' 本ASP程序是演示程序,建议不要直接在实际项目中使用。 | |||
|  | ' 如果您确定直接使用本程序,使用之前请仔细确认相关安全设置。 | |||
|  | ' | |||
|  | 
 | |||
|  | Dim aspUrl, rootPath, rootUrl, fileTypes | |||
|  | Dim currentPath, currentUrl, currentDirPath, moveupDirPath | |||
|  | Dim path, order, dirName, fso, folder, dir, file, result | |||
|  | Dim fileExt, dirCount, fileCount, orderIndex, i, j | |||
|  | Dim dirList(), fileList(), isDir, hasFile, filesize, isPhoto, filetype, filename, datetime | |||
|  | 
 | |||
|  | aspUrl = Request.ServerVariables("SCRIPT_NAME") | |||
|  | aspUrl = left(aspUrl, InStrRev(aspUrl, "/")) | |||
|  | 
 | |||
|  | '根目录路径,可以指定绝对路径,比如 /var/www/attached/ | |||
|  | rootPath = "../attached/" | |||
|  | '根目录URL,可以指定绝对路径,比如 http://www.yoursite.com/attached/ | |||
|  | rootUrl = aspUrl & "../attached/" | |||
|  | '图片扩展名 | |||
|  | fileTypes = "gif,jpg,jpeg,png,bmp" | |||
|  | 
 | |||
|  | currentPath = "" | |||
|  | currentUrl = "" | |||
|  | currentDirPath = "" | |||
|  | moveupDirPath = "" | |||
|  | 
 | |||
|  | Set fso = Server.CreateObject("Scripting.FileSystemObject") | |||
|  | 
 | |||
|  | '目录名 | |||
|  | dirName = Request.QueryString("dir") | |||
|  | If Not isEmpty(dirName) Then | |||
|  | 	If instr(lcase("image,flash,media,file"), dirName) < 1 Then | |||
|  | 		Response.Write "Invalid Directory name." | |||
|  | 		Response.End | |||
|  | 	End If | |||
|  | 	rootPath = rootPath & dirName & "/" | |||
|  | 	rootUrl = rootUrl & dirName & "/" | |||
|  | 	If Not fso.FolderExists(Server.mappath(rootPath)) Then | |||
|  | 		fso.CreateFolder(Server.mappath(rootPath)) | |||
|  | 	End If | |||
|  | End If | |||
|  | 
 | |||
|  | '根据path参数,设置各路径和URL | |||
|  | path = Request.QueryString("path") | |||
|  | If path = "" Then | |||
|  | 	currentPath = Server.MapPath(rootPath) & "\" | |||
|  | 	currentUrl = rootUrl | |||
|  | 	currentDirPath = "" | |||
|  | 	moveupDirPath = "" | |||
|  | Else | |||
|  | 	currentPath = Server.MapPath(rootPath & path) & "\" | |||
|  | 	currentUrl = rootUrl + path | |||
|  | 	currentDirPath = path | |||
|  | 	moveupDirPath = RegexReplace(currentDirPath, "(.*?)[^\/]+\/$", "$1") | |||
|  | End If | |||
|  | 
 | |||
|  | Set folder = fso.GetFolder(currentPath) | |||
|  | 
 | |||
|  | '排序形式,name or size or type | |||
|  | order = lcase(Request.QueryString("order")) | |||
|  | Select Case order | |||
|  | 	Case "type" orderIndex = 4 | |||
|  | 	Case "size" orderIndex = 2 | |||
|  | 	Case Else  orderIndex = 5 | |||
|  | End Select | |||
|  | 
 | |||
|  | '不允许使用..移动到上一级目录 | |||
|  | If RegexIsMatch(path, "\.\.") Then | |||
|  | 	Response.Write "Access is not allowed." | |||
|  | 	Response.End | |||
|  | End If | |||
|  | '最后一个字符不是/ | |||
|  | If path <> "" And Not RegexIsMatch(path, "\/$") Then | |||
|  | 	Response.Write "Parameter is not allowed." | |||
|  | 	Response.End | |||
|  | End If | |||
|  | '目录不存在或不是目录 | |||
|  | If Not DirectoryExists(currentPath) Then | |||
|  | 	Response.Write "Directory does not exist." | |||
|  | 	Response.End | |||
|  | End If | |||
|  | 
 | |||
|  | Set result = jsObject() | |||
|  | '相对于根目录的上一级目录 | |||
|  | result("moveup_dir_path") = moveupDirPath | |||
|  | '相对于根目录的当前目录 | |||
|  | result("current_dir_path") = currentDirPath | |||
|  | '当前目录的URL | |||
|  | result("current_url") = currentUrl | |||
|  | 
 | |||
|  | '文件数 | |||
|  | dirCount = folder.SubFolders.count | |||
|  | fileCount = folder.Files.count | |||
|  | result("total_count") = dirCount + fileCount | |||
|  | 
 | |||
|  | ReDim dirList(dirCount) | |||
|  | i = 0 | |||
|  | For Each dir in folder.SubFolders | |||
|  | 	isDir = True | |||
|  | 	hasFile = (dir.Files.count > 0) | |||
|  | 	filesize = 0 | |||
|  | 	isPhoto = False | |||
|  | 	filetype = "" | |||
|  | 	filename = dir.name | |||
|  | 	datetime = FormatDate(dir.DateLastModified) | |||
|  | 	dirList(i) = Array(isDir, hasFile, filesize, isPhoto, filetype, filename, datetime) | |||
|  | 	i = i + 1 | |||
|  | Next | |||
|  | ReDim fileList(fileCount) | |||
|  | i = 0 | |||
|  | For Each file in folder.Files | |||
|  | 	fileExt = lcase(mid(file.name, InStrRev(file.name, ".") + 1)) | |||
|  | 	isDir = False | |||
|  | 	hasFile = False | |||
|  | 	filesize = file.size | |||
|  | 	isPhoto = (instr(lcase(fileTypes), fileExt) > 0) | |||
|  | 	filetype = fileExt | |||
|  | 	filename = file.name | |||
|  | 	datetime = FormatDate(file.DateLastModified) | |||
|  | 	fileList(i) = Array(isDir, hasFile, filesize, isPhoto, filetype, filename, datetime) | |||
|  | 	i = i + 1 | |||
|  | Next | |||
|  | 
 | |||
|  | '排序 | |||
|  | Dim minidx, temp | |||
|  | For i = 0 To dirCount - 2 | |||
|  | 	minidx = i | |||
|  | 	For j = i + 1 To dirCount - 1 | |||
|  | 		If (dirList(minidx)(5) > dirList(j)(5)) Then | |||
|  | 			minidx = j | |||
|  | 		End If | |||
|  | 	Next | |||
|  | 	If minidx <> i Then | |||
|  | 		temp = dirList(minidx) | |||
|  | 		dirList(minidx) = dirList(i) | |||
|  | 		dirList(i) = temp | |||
|  | 	End If | |||
|  | Next | |||
|  | For i = 0 To fileCount - 2 | |||
|  | 	minidx = i | |||
|  | 	For j = i + 1 To fileCount - 1 | |||
|  | 		If (fileList(minidx)(orderIndex) > fileList(j)(orderIndex)) Then | |||
|  | 			minidx = j | |||
|  | 		End If | |||
|  | 	Next | |||
|  | 	If minidx <> i Then | |||
|  | 		temp = fileList(minidx) | |||
|  | 		fileList(minidx) = fileList(i) | |||
|  | 		fileList(i) = temp | |||
|  | 	End If | |||
|  | Next | |||
|  | 
 | |||
|  | Set result("file_list") = jsArray() | |||
|  | For i = 0 To dirCount - 1 | |||
|  | 	Set result("file_list")(Null) = jsObject() | |||
|  | 	result("file_list")(Null)("is_dir") = dirList(i)(0) | |||
|  | 	result("file_list")(Null)("has_file") = dirList(i)(1) | |||
|  | 	result("file_list")(Null)("filesize") = dirList(i)(2) | |||
|  | 	result("file_list")(Null)("is_photo") = dirList(i)(3) | |||
|  | 	result("file_list")(Null)("filetype") = dirList(i)(4) | |||
|  | 	result("file_list")(Null)("filename") = dirList(i)(5) | |||
|  | 	result("file_list")(Null)("datetime") = dirList(i)(6) | |||
|  | Next | |||
|  | For i = 0 To fileCount - 1 | |||
|  | 	Set result("file_list")(Null) = jsObject() | |||
|  | 	result("file_list")(Null)("is_dir") = fileList(i)(0) | |||
|  | 	result("file_list")(Null)("has_file") = fileList(i)(1) | |||
|  | 	result("file_list")(Null)("filesize") = fileList(i)(2) | |||
|  | 	result("file_list")(Null)("is_photo") = fileList(i)(3) | |||
|  | 	result("file_list")(Null)("filetype") = fileList(i)(4) | |||
|  | 	result("file_list")(Null)("filename") = fileList(i)(5) | |||
|  | 	result("file_list")(Null)("datetime") = fileList(i)(6) | |||
|  | Next | |||
|  | 
 | |||
|  | '输出JSON字符串 | |||
|  | Response.AddHeader "Content-Type", "text/html; charset=UTF-8" | |||
|  | result.Flush | |||
|  | Response.End | |||
|  | 
 | |||
|  | '自定义函数 | |||
|  | Function DirectoryExists(dirPath) | |||
|  | 	Dim fso | |||
|  | 	Set fso = Server.CreateObject("Scripting.FileSystemObject") | |||
|  | 	DirectoryExists = fso.FolderExists(dirPath) | |||
|  | End Function | |||
|  | 
 | |||
|  | Function RegexIsMatch(subject, pattern) | |||
|  | 	Dim reg | |||
|  | 	Set reg = New RegExp | |||
|  | 	reg.Global = True | |||
|  | 	reg.MultiLine = True | |||
|  | 	reg.Pattern = pattern | |||
|  | 	RegexIsMatch = reg.Test(subject) | |||
|  | End Function | |||
|  | 
 | |||
|  | Function RegexReplace(subject, pattern, replacement) | |||
|  | 	Dim reg | |||
|  | 	Set reg = New RegExp | |||
|  | 	reg.Global = True | |||
|  | 	reg.MultiLine = True | |||
|  | 	reg.Pattern = pattern | |||
|  | 	RegexReplace = reg.Replace(subject, replacement) | |||
|  | End Function | |||
|  | 
 | |||
|  | Public Function FormatDate(datetime) | |||
|  | 	Dim y, m, d, h, i, s | |||
|  | 	y = CStr(Year(datetime)) | |||
|  | 	m = CStr(Month(datetime)) | |||
|  | 	If Len(m) = 1 Then m = "0" & m | |||
|  | 	d = CStr(Day(datetime)) | |||
|  | 	If Len(d) = 1 Then d = "0" & d | |||
|  | 	h = CStr(Hour(datetime)) | |||
|  | 	If Len(h) = 1 Then h = "0" & h | |||
|  | 	i = CStr(Minute(datetime)) | |||
|  | 	If Len(i) = 1 Then i = "0" & i | |||
|  | 	s = CStr(Second(datetime)) | |||
|  | 	If Len(s) = 1 Then s = "0" & s | |||
|  | 	FormatDate = y & "-" & m & "-" & d & " " & h & ":" & i & ":" & s | |||
|  | End Function | |||
|  | %> |